103. 二叉树的锯齿形层序遍历--🀄️


103. 二叉树的锯齿形层序遍历

难度中等 402

给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

例如:

给定二叉树 [3,9,20,null,null,15,7],

3

/ \

9  20

/  \

15   7

返回锯齿形层序遍历如下:

[

[3],

[20,9],

[15,7]

]

    public List<List<Integer>> zigzagLevelOrder1(TreeNode root) &#123;
        List<List<Integer>> ans = new LinkedList<List<Integer>>();
        if (root == null) &#123;
            return ans;
        &#125;

        Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>();
        nodeQueue.offer(root);
        boolean isOrderLeft = true;

        while (!nodeQueue.isEmpty()) &#123;
            Deque<Integer> levelList = new LinkedList<Integer>();
            int size = nodeQueue.size();
            for (int i = 0; i < size; ++i) &#123;
                TreeNode curNode = nodeQueue.poll();
                if (isOrderLeft) &#123;
                    levelList.offerLast(curNode.val);
                &#125; else &#123;
                    levelList.offerFirst(curNode.val);
                &#125;
                if (curNode.left != null) &#123;
                    nodeQueue.offer(curNode.left);
                &#125;
                if (curNode.right != null) &#123;
                    nodeQueue.offer(curNode.right);
                &#125;
            &#125;
            ans.add(new LinkedList<Integer>(levelList));
            isOrderLeft = !isOrderLeft;
        &#125;

        return ans;
    &#125;
     public List<List<Integer>> zigzagLevelOrder(TreeNode root) &#123;
        List<List<Integer>> ans = new LinkedList<List<Integer>>();
        if (root == null) &#123;
            return ans;
        &#125;

        Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>();
        nodeQueue.offer(root);
        boolean isOrderLeft = true;

        while (!nodeQueue.isEmpty()) &#123;
            // Deque<Integer> levelList = new LinkedList<Integer>();
            List<Integer> levelList = new ArrayList<Integer>();
            int size = nodeQueue.size();
            for (int i = 0; i < size; ++i) &#123;
                TreeNode curNode = nodeQueue.poll();
                levelList.add(curNode.val);
                // if (isOrderLeft) &#123;
                //     levelList.offerLast(curNode.val);
                // &#125; else &#123;
                //     levelList.offerFirst(curNode.val);
                // &#125;
                if (curNode.left != null) &#123;
                    nodeQueue.offer(curNode.left);
                &#125;
                if (curNode.right != null) &#123;
                    nodeQueue.offer(curNode.right);
                &#125;
            &#125;
            // ans.add(new ArrayList<Integer>(levelList));
            //isOrderLeft = !isOrderLeft;
            if(ans.size()%2==1)&#123;
                Collections.reverse(levelList);
            &#125;
            ans.add(new ArrayList<Integer>(levelList));
        &#125;
        return ans;
    &#125;

文章作者:   future
版权声明:   本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 future !
 上一篇
912. 排序数组 912. 排序数组
912. 排序数组难度中等 给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1,1,2,0,0] 输出:[0,0,1,1
下一篇 
179. 最大数 179. 最大数
179. 最大数难度中等 477 给定一组非负整数 nums,重新排列它们每个数字的顺序(每个数字不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 示例 1: 输入**:**``nums =
  目录