[路飞]_程序员必刷力扣题: 剑指 Offer 32 - II. 从上到下打印二叉树 II

129 阅读1分钟

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

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

示例 1:

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

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

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

提示:

节点总数 <= 1000

层序遍历

思路

题目要求我们将:每一层打印到同一行

首先处理边界条件:root无效直接返回[]

遍历方式:层序遍历

实现方式

因为要将每一行的结果打印在一起,所以我们需要记录每一行的一个状态,保证当前的所有元素在同一行

修改层序遍历方式:

这里我们通过格外的数组curr来表示当前行的信息,将每一行的子元素push到curr中,这样当stack遍历结束时,curr就保存的是下一行的所有节点,stack保存的是当前行的所有节点。(不能直接push到stack中,否则无法区分行的信息)

还需要一个数组currRes来保存当前行的所有结果,当stack为空时,代表当前行遍历结束。

  • 将currRes的结果push到结果集合res中,然后清空currRes
  • 将curr赋值给stack,并清空curr

遍历结果拿到结果集合res,返回res

var levelOrder = function(root) {
    var res = []
    if(!root) return res
    var stack = [root]
    var curr = []
    var currRes = []
    while(stack.length){
        var item = stack.shift();
        currRes.push(item.val)
        if(item.left) curr.push(item.left)
        if(item.right) curr.push(item.right)
        if(!stack.length){
            res.push(currRes)
            stack = curr
            curr = []
            currRes = []
        }
    }
    return res
};