剑指offer:32
问题描述:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
也就是将层序遍历的直接输出改为输出到集合中。
算法:
这个问题的解决其实就是二叉树的层序遍历输出,这里面需要结合队列进行遍历。
publicList<List> levelOrder(TreeNode root) {}
首先我们看到问题的要求是输出一个集合型结果集。所以我们首先需要创建一个用于保存结果的集合。
- List<List> res=new ArrayList<>();
- 因为我们需要结合队列来进行输出,所以我们需要创建一个队列,来进行遍历使用。
Queue queue=new LinkedList<>();
扫描二维码关注公众号,回复:
12466306 查看本文章
- 然后我们开始进行层序遍历二叉树输出。首先我们判断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;
}