, ,

二叉树-从上到下打印二叉树

描述 不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如…

描述

不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{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

  1. 根节点入队;
  2. 循环取出队首节点,存入结果;
  3. 有左子树左节点入队,有右子树右节点入队;
  4. 队列为空结束。
/* 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的问题

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About the Author

每个人都有自己得时区,在自己得时区里,一切都是准时的。

BlockSpare — News, Magazine and Blog Addons for (Gutenberg) Block Editor