JAVA练习73-III. 从上到下打印二叉树 III

JAVA练习73-III. 从上到下打印二叉树 III,第1张

JAVA练习73-III. 从上到下打印二叉树 III

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

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

返回其层次遍历结果:
[
  [3],
  [20,9],
  [15,7]
]

提示:

节点总数 <= 1000 分析:

方法:BFS+标识

实现方式和 II. 从上到下打印二叉树 II 一样,不同之处在于每层的元素顺序的是反过来的,可以定义一个标识来记录左右,一层遍历完就把该标识赋为另一个方向。反向遍历的方式有很多种,比如每次插入在 List 集合的首位,从双队列的头部插入等等,我这里采用的第一种。

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

class Solution {
    public List> levelOrder(TreeNode root) {
        //判断空树
        if(root == null){
            return new ArrayList();
        }
        //定义队列
        Deque queue = new ArrayDeque<>();
        //入栈
        queue.offerLast(root);
        //创建List集合存储每层的List集合
        List> res = new ArrayList<>();
        //标识左右打印
        boolean flag = true;
        //遍历
        while(!queue.isEmpty()){
            //获取队列长度
            int size = queue.size();
            //定义List集合存储该层的节点值
            List list = new ArrayList<>();
            //按层次遍历
            while(size-- > 0){
                //出栈
                TreeNode node = queue.pollFirst();
                //添加节点值
                //从左到右
                if(flag){
                    list.add(node.val);
                }
                //从右到左
                else{
                    list.add(0, node.val);
                }
                //左节点不为空添加左节点
                if(node.left != null){
                    queue.offerLast(node.left);
                }
                //右节点不为空添加右节点
                if(node.right != null){
                    queue.offerLast(node.right);
                }
            }
            //改变打印方向  
            flag = !flag;
            //将List集合添加到List集合中
            res.add(list);
        }
        return res;
    }
}

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5718764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存