Leetcode - 103. 二叉树的锯齿形层次遍历

解题思路参考代码中的注释:
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    // 先进行层序遍历,然后再对奇数层(层数从0开始算)进行反转即可
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> layers = levelOrder(root);
 
        // 对下标为奇数的List集合进行反转
        for (int i = 1; i < layers.size(); i += 2) {
            Collections.reverse(layers.get(i));
        }
 
        return layers;
    }

    // 上一题(https://leetcode-cn.com/problems/binary-tree-level-order-traversal/)的代码
    private static List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }

        // root节点单独作为第一层
        LinkedList<TreeNode> layer = new LinkedList<>();
        layer.add(root);

        // 如果当前层还有节点
        while (!layer.isEmpty()) {
            List<Integer> list = new ArrayList<>();
            int size = layer.size();
            while (size-- > 0) {
                TreeNode node = layer.pollFirst();
                
                // 将当前层节点的信息存储下来
                list.add(node.val);

                // 添加下一层的节点
                if (node.left != null) {
                    layer.add(node.left);
                }
                if (node.right != null) {
                    layer.add(node.right);
                }
            }
            ret.add(list);
        }

        return ret;
    }
}
全部评论

相关推荐

xtu大迫杰:偶遇校友,祝校友offer打牌
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务