从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:
[3,9,20,15,7]
提示:
节点总数 <= 1000
具体代码实现如下:
/**
* 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) {
// 注意,返回值为数组类型,若根节点为空,则返回空,即return new int[0]
if(root == null) return new int[0];
List<Integer> list = new ArrayList<>();// 用于存放结果
// 创建队列,利用其先进先出的特点,进行BFS
Queue<TreeNode> queue = new LinkedList<>();
// 首先将根节点加入队列
queue.add(root);
// 当队列为空时,跳出循环
while(!queue.isEmpty()){
// 声明一个当前节点,用来存储出队元素
TreeNode cur = queue.poll();
// 将出队元素的值加入到结果集合中
list.add(cur.val);
// 若根节点的左(右)子节点存在,则将其加入到队列
if(cur.left != null) queue.add(cur.left);
if(cur.right != null) queue.add(cur.right);
}
// 创建结果数组,循环将list集合中的元素赋值到结果数组中,
int len = list.size();
int[] res = new int[len];
for(int i = 0; i < len; i++){
res[i] = list.get(i);// 注意这里要用ArrayList的get(i)方法来获取元素,这样速度比较快,若用remove(i)方法的话,会使速度变慢。
}
return res;
}
}
人生若只如初见,何事秋风悲画扇。
等闲变却故人心,却道故人心易变。
-----------纳兰性德
小白寄语:学如逆水行舟,不进则退。