[路飞]_从上到下打印二叉树 II

1,413 阅读1分钟

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

题目

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

解题思路

深度优先遍历

通过level变量记录二叉树递归层级;将枚举到的二叉树节点值塞进指定层级中即可

代码

var levelOrder = function (root) {
  const result = []
  helper(root, 0)
  return result
  function helper(node, level) {
    if (node === null) return
    if (result[level] === undefined) {
      result[level] = [node.val]
    } else [result[level].push(node.val)]

    helper(node.left, level + 1)
    helper(node.right, level + 1)
  }
}

广度优先遍历

思路

将本层全部节点打印到一行,并将下一层全部节点加入队列,以此类推,即可分为多行打印。

代码

var levelOrder = function(root) {
    if(root === null) return []
    const result = [];
    let stack = [root];
    while(stack.length){
        const path = [];
        for(let i = stack.length-1 ; i >=0  ; i--){
            let temp = stack.shift();
            path.push(temp.val);
            temp.left && stack.push(temp.left)
            temp.right && stack.push(temp.right) 
        }
        result.push(path)
    }
    return result

};