二叉树的锯齿形层序遍历LeetCode 103|刷题打卡

226 阅读1分钟

题目

题解

采用dfs算法广度优先算法,就是一层一层的展开整个树,List每展开一层先从右边添加,下一层从左边添加这样一层一层递推。List我们采用双端队列,先offerLast()下一层再offerFirst()。完整代码如下,也是dfs的标准写法。

代码

public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
    List<List<Integer>> ans = new ArrayList<>();
    if (root == null) {
        return ans;
    }
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root);
    boolean isOrderLeft = true;
    while (!queue.isEmpty()) {
        int size = queue.size();
        Deque<Integer> levelList = new LinkedList<>();
        List<Integer> temp = new ArrayList<>();
        for (int i = 0; i < size; ++i) {
            TreeNode curNode = queue.poll();
            if (isOrderLeft) {
                levelList.offerLast(curNode.val);
            } else {
                levelList.offerFirst(curNode.val);
            }
            if (curNode.left != null) {
                queue.offer(curNode.left);
            }
            if (curNode.right != null) {
                queue.offer(curNode.right);
            }
        }
        ans.add(new ArrayList<>(levelList));
        isOrderLeft = !isOrderLeft;
    }
    return ans;
}

备注

本文正在参与「掘金 2021 春招闯关活动」, 点击查看