题目
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
返回:
[3,9,20,15,7]
提示:
节点总数 <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof
解题思路
本质上就是二叉树的层序遍历,使用队列解决
注意点:
层序遍历获取到的值事先不知道size,所以需要使用一个ArrayList作为临时存储,然后在把ArrayList中的值赋值给数组
代码
class Solution {
public int[] levelOrder(TreeNode root) {
// 校验
if (root == null) {
return new int[0];
}
// 用来临时存储
ArrayList<Integer> tempList = new ArrayList<>();
// 队列
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root);
// 循环
while (!queue.isEmpty()) {
// 获取队列的size,循环
int size = queue.size();
while (size > 0) {
TreeNode node = queue.poll();
tempList.add(node.val);
// 分别添加左子树和右子树到队列中
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
size--;
}
}
// 创建返回的数组,循环赋值
int[] array = new int[tempList.size()];
for (int i = 0; i < tempList.size(); i++) {
array[i] = tempList.get(i);
}
return array;
}
}