剑指[32]-由上至下打印二叉树
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指[32]-由上至下打印二叉树相关的知识,希望对你有一定的参考价值。
题目来源:剑指 Offer 32 - I. 从上到下打印二叉树
题目描述
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \\
9 20
/ \\
15 7
返回:
[3,9,20,15,7]
提示:
节点总数 <= 1000
- 先排除空树的情况,直接返回空数组;
- 根据队列可以先入先出的结构,创建队列时就把二叉树的根结点存入;
- 在队列不为空的前提下,就把队列的头部元素出队;存入一个集合中;这时还要判断刚才出队的元素是否有左子树/右子树;有的话左右子树就依次从队尾入队;
- 最终所有元素都顺利出队后,考虑按照集合的实际元素个数创建数组,将集合中的元素按顺序向数组存入一份;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
public int[] levelOrder(TreeNode root) {
//把二叉树的元素一个个放入队列;然后存入集合;最后再转为数组;
if(root == null) return new int[0];
//创建一个队列(先入先出)提前就把根结点存入了;一个集合;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
List<Integer> list = new ArrayList<>();
//只要队列不为空,就操作;
while (!queue.isEmpty()){
//里面的元素从队首先出来;存入集合;
TreeNode poll = queue.poll();
list.add(poll.val);
//看这个节点是否有左右子树,有的话加进来;
if(poll.left!=null) queue.add(poll.left);
if(poll.right!=null) queue.add(poll.right);
}
//最后要返回的数组;
int[] res = new int[list.size()];
//把集合元素存到数组;
for (int i = 0; i < res.length; i++) {
res[i] = list.get(i);
}
return res;
}
}
以上是关于剑指[32]-由上至下打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章