从上到下打印二叉树I&II

【题目描述】

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

【示例】

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

    3
   / \
  9  20
    /  \
   15   7

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

【代码实现】

  • 题目要求的二叉树的 从上至下 打印(即按层打印),又称为二叉树的 广度优先搜索(BFS)
  • BFS 可以用队列的先入先出特性来实现
  • 题目给的输出是int型数组,需要将TreeNode型队列的值逐一保存,并放入int型数组输出
/**
 * 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];
        }else{
            LinkedList<TreeNode> queue=new LinkedList<>();
            ArrayList<Integer> temp = new ArrayList<>();
            queue.addLast(root);
            while(!queue.isEmpty()){
                TreeNode node=queue.removeFirst();
                temp.add(node.val);
                if(node.left!=null){
                    queue.addLast(node.left);
                }
                if(node.right!=null){
                    queue.addLast(node.right);
                }
            }
            int res[]=new int[temp.size()];
            for(int i=0;i<temp.size();i++){
                res[i]=temp.get(i);
            }
            return res;
        }
    }
}

 

【示例】

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

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

【代码实现】

  • 这一题与上一题的区别在于输出,要求每层打印到一行
  • 实现思路:将本层全部节点打印到一行,并将下一层全部节点加入队列,以此类推,即可分为多行打印
  • 返回类型要求是List<List<Integer>>
/**
 * 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) {
        if(root==null){
            return new ArrayList<List<Integer>>();
        }else{
            List<List<Integer>> res=new ArrayList<>();
            LinkedList<TreeNode> queue=new LinkedList<>();
            queue.addLast(root);
            while(!queue.isEmpty()){
                List<Integer> temp=new ArrayList<>();
                for(int i=queue.size();i>0;i--){
                    TreeNode node=queue.removeFirst();
                    temp.add(node.val);
                    if(node.left!=null){
                        queue.addLast(node.left);
                    }
                    if(node.right!=null){
                        queue.addLast(node.right);
                    }
                }
                res.add(temp);
            }
            return res;
        }
    }
}

 

posted @ 2022-03-11 17:25  IcyYs  阅读(55)  评论(0编辑  收藏  举报