107. Binary Tree Level Order Traversal II

70 阅读1分钟

题目描述

Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as: [ [15,7], [9,20], [3] ]

解题思路

这个题目与104题一样,只不过是在遍历的过程中, 将层数的变量改为数组, 来存储每一层的value

示例代码

func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
    guard let root = root else { return [] } 
    var stack = [[TreeNode]]()
    stack.append([root])
    var result: [[Int]] = []
    result.append([root.val])
    while !stack.isEmpty {
        let last = stack.removeLast()
        if last.count > 0 {
            var line = [TreeNode]()
            var lineV: [Int] = []
            last.forEach { (node) in
                if let left = node.left  {
                    line.append(left)
                    lineV.append(left.val)
                }
                if let right = node.right {
                    line.append(right)
                    lineV.append((right).val)
                }
            }
            if line.count > 0 {
                stack.append(line)
                result.append(lineV)
            }
        }
    }
    return result.reversed()
}