LeetCode&&剑指offer 面试题32 - III. 从上到下打印二叉树 III 我的解题记录

题目
在这里插入图片描述
当需要从左到右时,我们需要转为栈来使用
当需要从右到左,我们需要转为队列来使用
所以我们可以利用LinkedList

    public List<List<Integer>> levelOrder(TreeNode root) {
        LinkedList<TreeNode> linkedList = new LinkedList<>();
        List<List<Integer>> out = new ArrayList<>();
        if (root==null)
            return out;
        linkedList.add(root);
        boolean flag = true; //true表示从左到右 false表示从右到左
        while (!linkedList.isEmpty()){
            int size = linkedList.size();
            List<Integer> list = new ArrayList<>();
            while (size>0){
                if (flag){   //如果为左到右 那么我们要取最后的结点 先把该结点的左结点添加到最前面 然后把该结点的右节点添加到最前面 此时为栈
                    TreeNode node = linkedList.pollLast();
                    if (node.left!=null)
                        linkedList.addFirst(node.left);
                    if (node.right!=null)
                        linkedList.addFirst(node.right);
                    list.add(node.val);
                }else { //如果为右到左 那么我们要取最前的结点 先把该结点的右结点添加到最后面 然后把该结点的左节点添加到最后面 此时为队列
                    TreeNode node = linkedList.pollFirst();
                    if (node.right!=null)
                        linkedList.addLast(node.right);
                    if (node.left!=null)
                        linkedList.addLast(node.left);
                    list.add(node.val);
                }
                size--;
            }
            flag = !flag;   //下一次的顺序与本次相反
            out.add(list);
        }
        return out;
    }

在这里插入图片描述
代码可能看起来有点多 但是我觉得逻辑还蛮清晰 贴出来分享一下

发布了4 篇原创文章 · 获赞 9 · 访问量 72

猜你喜欢

转载自blog.csdn.net/weixin_44233929/article/details/105455207
今日推荐