• 剑指offer_22:从上往下打印二叉树


    从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

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

    返回:
    [3,9,20,15,7]

    提示:
    节点总数 <= 1000

    BFS

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public int[] levelOrder(TreeNode root) {
            if(root==null) return new int[0];
            Queue<TreeNode> queue=new LinkedList<>();
            List<Integer> list=new ArrayList<>();
            queue.offer(root);
            while(!queue.isEmpty()){
                TreeNode node=queue.poll();
                list.add(node.val);
                if(node.left!=null) queue.offer(node.left);
                if(node.right!=null) queue.offer(node.right);
            }
            int[] res=new int[list.size()];
            for(int i=0;i<list.size();i++){
                res[i]=list.get(i);
            }
            return res;
        }
    }
    

    提高1:

    从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

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

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

    提示:
    节点总数 <= 1000

    1、BFS

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public List<List<Integer>> levelOrder(TreeNode root) {
            List<List<Integer>> res=new ArrayList<>();
            if(root==null) return res;
            Queue<TreeNode> queue=new LinkedList<>();
            queue.offer(root);
            while(!queue.isEmpty()){
                List<Integer> list=new ArrayList<>();
                int size=queue.size();
                for(int i=0;i<size;i++){
                    TreeNode node=queue.poll();
                    list.add(node.val);
                    if(node.left!=null) queue.offer(node.left);
                    if(node.right!=null) queue.offer(node.right);
                }
                res.add(list);
            }
            return res;
        }
    }
    

    2、DFS

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public List<List<Integer>> levelOrder(TreeNode root) {
            List<List<Integer>> res=new ArrayList<>();
            levelOrder(root,res,0);
            return res;
        }
        public void levelOrder(TreeNode root,List<List<Integer>> res,int level){
            if(root==null) return;
            if(level>=res.size()){
                res.add(new ArrayList<Integer>());
            }
            res.get(level).add(root.val);
            if(root.left!=null) levelOrder(root.left,res,level+1);
            if(root.right!=null) levelOrder(root.right,res,level+1);
        }
    }
    

    提高2:

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

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

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

    提示:
    节点总数 <= 1000

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public List<List<Integer>> levelOrder(TreeNode root) {
            List<List<Integer>> res=new ArrayList<>();
            if(root==null) return res;
            Queue<TreeNode> queue=new LinkedList<>();
            queue.offer(root);
            int level=1;
            while(!queue.isEmpty()){
                LinkedList<Integer> list=new LinkedList<>();
                int size=queue.size();
                for(int i=0;i<size;i++){
                    TreeNode node=queue.poll();
                    if(level%2!=0){
                        list.addLast(node.val);
                    }else{
                        list.addFirst(node.val);
                    }
                    if(node.left!=null) queue.offer(node.left);
                    if(node.right!=null) queue.offer(node.right);
                }
                level++;
                res.add(list);
            }
            return res;
        }
    }
    
  • 相关阅读:
    前端综合练习与bootstrap
    05-前端之jQuery
    03-初识JavaScript
    02-初识CSS
    01-前端初识和body标签中的相关标签
    程序员笔记
    windows和Ubantu双系统安装图解
    获取http和ftp地址的图片
    HttpHelper类及调用
    简单的SqlHelper
  • 原文地址:https://www.cnblogs.com/xyz-1024/p/14159976.html
Copyright © 2020-2023  润新知