0
点赞
收藏
分享

微信扫一扫

【二叉树】求根节点到叶节点数字之和


0x00 题目

给你一个二叉树的根节点 ​​root​​​ 树中每个节点都存放有一个 ​​0​​ 到 ​​9​​ 之间的数字
每条从 ​​根​​ 节点到 ​​叶​​ 节点的路径都代表一个 ​​数字​

例如,从 ​​根​​​ 节点到 ​​叶​​​ 节点的路径 ​​1 -> 2 -> 3​​​ 表示数字 ​​123​

计算从根节点到叶节点生成的 ​​所有数字之和​​​ 叶节点 是指 ​​没有​​ 子节点的节点

0x01 思路

根据题目给出的例子:
从 ​​​根​​​ 节点到 ​​叶​​​ 节点的路径 ​​1 -> 2 -> 3​​​ 表示数字 ​​123​​​ 说明每往下走一层,上一层的数字都要乘以 ​​10​​ 一直往下累加,直到叶节点
计算完一条路径后,再计算其他路径
直到计算完所有路径,得出结果

0x02 解法

语言:​​Swift​

树节点:​​TreeNode​

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
}
}

解法:

func sumNumbers(_ root: TreeNode?) -> Int {
guard let root = root else { return 0 }

// 最终结果
var res = 0

func sum(_ root: TreeNode?, _val: Int) {
guard let root = root else { return }

// 上一层的结果 乘以 10,加上本节点的值
let out = val * 10 + root.val
// 到了 叶节点
if root.left == nil && root.right == nil {
res += out
return
}

// 去下一层
sum(root.left, out)
sum(root.right, out)
}

//计算
sum(root, 0)

return res
}

举报

相关推荐

0 条评论