描述
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。
数据范围:
0<=节点总数<=1000
-1000<=节点值<=1000
示例1
输入:
{8,6,10,#,#,2,1}
返回值:
[8,6,10,2,1]
示例2
输入:
{5,4,#,3,#,2,#,1}
返回值:
[5,4,3,2,1]
TreeNode {
val: 8,
left: TreeNode { val: 6, left: null, right: null },
right: TreeNode {
val: 10,
left: TreeNode { val: 2, left: null, right: null },
right: TreeNode { val: 1, left: null, right: null }
}
} root
思路:队列 BFS
- 根节点入队;
- 循环取出队首节点,存入结果;
- 有左子树左节点入队,有右子树右节点入队;
- 队列为空结束。
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function PrintFromTopToBottom(root)
{
// write code here
if(!root) return []; //边界问题
const res = [];
const queue = [root];
while(queue.length)
{
const node = queue.shift();
console.log(node,'node');
if(node?.val!==null){
res.push(node.val);
const left = node.left;
if(left!==null) queue.push(left);
const right = node.right;
if(right!==null) queue.push(right);
}
}
console.log(res,'res');
return res;
}
module.exports = {
PrintFromTopToBottom : PrintFromTopToBottom
};
注意边界问题和空值0的问题




