算法打卡(五)----层序遍历打印二叉树

剑指offer:32

问题描述:

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

也就是将层序遍历的直接输出改为输出到集合中。

在这里插入图片描述
在这里插入图片描述

算法:

这个问题的解决其实就是二叉树的层序遍历输出,这里面需要结合队列进行遍历。

在这里插入图片描述

publicList<List> levelOrder(TreeNode root) {}

首先我们看到问题的要求是输出一个集合型结果集。所以我们首先需要创建一个用于保存结果的集合。

  • List<List> res=new ArrayList<>();
  • 因为我们需要结合队列来进行输出,所以我们需要创建一个队列,来进行遍历使用。

Queue queue=new LinkedList<>();

在这里插入图片描述

  • 然后我们开始进行层序遍历二叉树输出。首先我们判断root是否为空。root不为空时,我们将root放入队头。

在这里插入图片描述

然后我们将这层的元素添加到集合中。

while (!queue.isEmpty()){
           List<Integer> tmp=new ArrayList<>();
           for(int i=queue.size();i>0;i--){
               TreeNode node=queue.poll();
               tmp.add(node.val);
               if(node.left!=null) queue.offer(node.left);
               if(node.right!=null)queue.offer(node.right);
           }
           res.add(tmp);
       }

代码:

 public List<List<Integer>> levelOrder(TreeNode root) {
       Queue<TreeNode> queue=new LinkedList<>();
       List<List<Integer>> res=new ArrayList<>();
       if(root!=null) queue.add(root);
       while (!queue.isEmpty()){
           List<Integer> tmp=new ArrayList<>();
           for(int i=queue.size();i>0;i--){
               TreeNode node=queue.poll();
               tmp.add(node.val);
               if(node.left!=null) queue.offer(node.left);
               if(node.right!=null)queue.offer(node.right);
           }
           res.add(tmp);
       }
return res;
    }

猜你喜欢

转载自blog.csdn.net/qq_44762290/article/details/113311716