剑指 Offer 32 - III. 从上到下打印二叉树 III

剑指 Offer 32 - III. 从上到下打印二叉树 III

题目

链接

https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/

问题描述

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

示例

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

3  

/
9 20
/
15 7
返回其层次遍历结果:

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

提示

节点总数 <= 1000

思路

之字型打印,只需要考虑一下,数据写入的时候改变方向即可。

这里设置flag,确保左右顺序。

复杂度分析

时间复杂度 O(n)
空间复杂度 O(n)

代码

Java

    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        if (root != null) {
            queue.add(root);
        }
        boolean flag = false;
        while (!queue.isEmpty()) {
            LinkedList<Integer> ans = new LinkedList<>();
            for (int i = queue.size(); i > 0; i--) {
                TreeNode tmp = queue.poll();
                if (flag) {
                    ans.addFirst(tmp.val);
                } else {
                    ans.addLast(tmp.val);
                }
                if (tmp.left != null) {
                    queue.add(tmp.left);
                }
                if (tmp.right != null) {
                    queue.add(tmp.right);
                }
            }
            flag = !flag;
            res.add(ans);
        }
        return res;
    }
posted @ 2020-03-06 13:31  cheng102e  阅读(120)  评论(0编辑  收藏  举报