欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法---LeetCode 103. 二叉树的锯齿形层序遍历

程序员文章站 2022-05-21 08:13:36
...

1. 题目

原题链接

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

3

/
9 20
/
15 7

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

[
[3],
[20,9],
[15,7]
]

Related Topics 栈 树 广度优先搜索
???? 371 ???? 0

2. 题解

2.1 解法1: 层序遍历, 过程中根据奇偶逆序list

    class Solution {
        public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
            List<List<Integer>> listList = new ArrayList<>();
            if (root == null) {
                return listList;
            }
            Queue<TreeNode> queue = new LinkedList<>();
            queue.add(root);
            int flag = 1;
            while (!queue.isEmpty()) {
                int size = queue.size();
                ArrayList<Integer> list = new ArrayList<>();
                for (int i = 0; i < size; i++) {
                    TreeNode temp = queue.poll();
                    list.add(temp.val);
                    if (temp.left != null) {
                        queue.add(temp.left);
                    }
                    if (temp.right != null) {
                        queue.add(temp.right);
                    }
                }
                // 若为偶数层, 则翻转数组, 再加入结果集
                if (flag % 2 == 0) {
                    Collections.reverse(list);
                }
                listList.add(list);
                flag++;
            }
            return listList;
        }
    }