美文网首页剑指offer最优解Java版
剑指offer最优解Java版-按之字形顺序打印二叉树

剑指offer最优解Java版-按之字形顺序打印二叉树

作者: 全菜工程师小辉 | 来源:发表于2019-07-15 22:24 被阅读1次

    题目描述

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

    解决方法

    在层序遍历的基础上,增加根据行数进行正向反向迭代(正向反向迭代利用LinkedList双向链表)

    class TreeNode {
        int      val   = 0;
        TreeNode left  = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
        }
    }
    
    public class Solution {
        public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
            ArrayList<ArrayList<Integer>> layers = new ArrayList<>();
            if (pRoot == null)
                return layers;
            Deque<TreeNode> queue = new LinkedList<>();
            queue.offer(pRoot);
            int depth = 0;
            while (!queue.isEmpty()) {
                depth++;
                ArrayList<Integer> layer = new ArrayList<>();
                int cur = 0, size = queue.size();
                if ((depth & 1) == 0) { //如果是偶数层倒序添加
                    Iterator<TreeNode> it = queue.descendingIterator();
                    while (it.hasNext()) {
                        layer.add(it.next().val);
                    }
                } else { //如果是奇数层正序添加
                    Iterator<TreeNode> it = queue.iterator();
                    while (it.hasNext()) {
                        layer.add(it.next().val);
                    }
                }
                while (cur < size) {
                    TreeNode node = queue.poll();
                    if (node.left != null) {
                        queue.offer(node.left);
                    }
                    if (node.right != null) {
                        queue.offer(node.right);
                    }
                    cur++;
                }
                layers.add(layer);
            }
            return layers;
        }
    }
    

    复杂度分析:

    • 时间复杂度:O(n)。
    • 空间复杂度:O(n)。
    哎呀,如果我的名片丢了。微信搜索“全菜工程师小辉”,依然可以找到我

    相关文章

      网友评论

        本文标题:剑指offer最优解Java版-按之字形顺序打印二叉树

        本文链接:https://www.haomeiwen.com/subject/jdobcctx.html