• 2627二叉树的层次遍历和之字顺序打印


    26.二叉树的层次遍历

    用列队,BFS,时间复杂度和空间复杂度都是O(N)

    import java.util.*;
    
    /*
     * public class TreeNode {
     *   int val = 0;
     *   TreeNode left = null;
     *   TreeNode right = null;
     * }
     */
    
    public class Solution {
        /**
         * 
         * @param root TreeNode类 
         * @return int整型ArrayList>
         */
        public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
            // write code here
            ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
            Queue<TreeNode> q = new ArrayDeque<>();
            q.offer(root);
            while(!q.isEmpty()){
                //一层
                ArrayList<Integer> row = new ArrayList<Integer>();
                int count = q.size();
                //这层的个数刚好是队列的长度
                while(count-- >0){
                    TreeNode node = q.poll();
                    row.add(node.val);
                    if(node.left!=null) q.offer(node.left);
                    if(node.right!=null) q.offer(node.right);
                }
                res.add(row);
            }
            return res;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    27.二叉树之字打印

    在这里插入图片描述

    一开始是在offer左节点和右节点的顺序上做判断,测试了一下发现是错误的,第二个例子就错误了,后面就直接在row的数组中判断奇数=偶层,偶层把row数组反转一下,其余和上面上一题的层次遍历完全一致、时间复杂度和空间复杂度都是O(N)

    import java.util.*;
    import java.util.ArrayList;
    
    /*
    public 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>> res = new ArrayList<ArrayList<Integer>>();
            Queue<TreeNode> q = new ArrayDeque<>();
            if(pRoot==null) return new ArrayList<ArrayList<Integer>>(0);
            q.offer(pRoot);
            int index = 0;
            while(!q.isEmpty()){
                ArrayList<Integer> row = new ArrayList<>();
                ArrayList<Integer> rever = new ArrayList<>();
                int count = q.size();
                index++;
                while(count-- >0){
                        TreeNode node = q.poll();
                        row.add(node.val);                 
                        if(node.left!=null) q.offer(node.left);//奇数层从右到左                   
                        if(node.right!=null) q.offer(node.right);
                } 
                if(index%2==0){
                    for(int i = row.size()-1; i>=0;i--){
                        rever.add(row.get(i));
                    }
                    res.add(rever);
                }
                else res.add(row);
            }
            return res;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    Python抽象基类:ABC谢谢你,因为有你,温暖了四季!
    C. Raspberries-Codeforces Round 905 (Div. 3)
    IntelliJ IDEA 如何设置类注释和方法注释
    latex如何保证图片和文字的相对位置不变
    (50)其他的性能测试场景
    中国膜产业需求动态与竞争策略分析报告2022-2028年
    如何用Postman实现自动化测试(含视频讲解)
    【保姆级·创建对象】如何利用resolveBeforeInstantiation()在预处理阶段返回一个Bean的实例对象
    牛顿定理和相关推论
    使用Feign远程调用快速入门
  • 原文地址:https://blog.csdn.net/Sophia2333333331/article/details/126334320