剑指 Offer 32 - I. 从上到下打印二叉树

94 阅读1分钟

题解

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回:

[3,9,20,15,7]

提示:

  1. 节点总数 <= 1000

题解

本题考察的就是二叉树的广度优先搜索(BFS), 一般BFS借助队列先进先出的特性实现

具体执行流程:

  1. 如果树的根节点为空,则直接返回[]
  2. 初始化,声明结果数组res = [], 包含根节点的队列queue = [root]
  3. 循环当队列为空时终止
    • 出队, 队首元素出队,即node = queue.shift()
    • 添加节点值, 将node.val添加到 res中, 即res.push(node.val)
    • 添加左右子节点,当node.leftnode.right都不为空,将左右子节点添加到queue
  4. 返回结果数组res即可

代码

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var levelOrder = function(root) {
    if (root == null) return [];
    const queue = [root];
    const res = [];
    while(queue.length > 0) {
        let node = queue.shift();
        res.push(node.val);
        if (node.left) queue.push(node.left);
        if (node.right) queue.push(node.right);
      
    }

    return res;
};

原题链接

剑指 Offer 32 - I. 从上到下打印二叉树