leetcode107. 二叉树的层序遍历 II
题目描述:
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如: 给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其自底向上的层序遍历为:
[
[15,7],
[9,20],
[3]
]
代码模版(swift)
/**
* Definition for a binary tree node.
* public class TreeNode {
* public var val: Int
* public var left: TreeNode?
* public var right: TreeNode?
* public init() { self.val = 0; self.left = nil; self.right = nil; }
* public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
* public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
* self.val = val
* self.left = left
* self.right = right
* }
* }
*/
class Solution {
func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
}
}
思路(树的深度遍历)
将树从左至右进行深度遍历,每次遍历添加至对应深度的数组中,然后数组反转,即可得到倒序层次遍历。
/**
* Definition for a binary tree node.
* public class TreeNode {
* public var val: Int
* public var left: TreeNode?
* public var right: TreeNode?
* public init(_ val: Int) {
* self.val = val
* self.left = nil
* self.right = nil
* }
* }
*/
class Solution {
var ans107 = [[Int]]()
func levelOrderBottom(_ root: TreeNode?) -> [[Int]] { // 107. 二叉树的层次遍历 II
if root == nil {
return []
}
levelOrderBottomDFS(root!, 0) //从最上层开始遍历
return ans107.reversed() // 正常遍历反转为答案值
}
func levelOrderBottomDFS(_ node: TreeNode, _ degree: Int) { // 入参:节点和树深度
if ans107.count <= degree {
ans107.append([Int]()) // 若答案数组中没有对应下表数组,创建一个
}
ans107[degree].append(node.val) // 将对应深度数组加入节点值
if node.left != nil {
levelOrderBottomDFS(node.left!, degree + 1) // 左子树深度遍历,深度+1
}
if node.right != nil {
levelOrderBottomDFS(node.right!, degree + 1) // 右子树深度遍历,深度+1
}
}
}
本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情