LeetCode 129. 求根节点到叶节点数字之和
题目描述
思路分析
层序遍历
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func sumNumbers(root *TreeNode) int {
var res int
var dfs func(node *TreeNode, cur int)
dfs = func(node *TreeNode, cur int) {
if node == nil {
return
}
cur = cur*10 + node.Val
// 如果到达叶子节点,加入结果
if node.Left == nil && node.Right == nil {
res += cur
return
}
// 递归左右子树
dfs(node.Left, cur)
dfs(node.Right, cur)
}
dfs(root, 0)
return res
}
- 时间复杂度:O(n),其中 n 是树的节点个数。
- 空间复杂度:O(h),h 为树的高度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
func sumNumbers(root *TreeNode) int {
if root == nil {
return 0
}
type Pair struct {
node *TreeNode
val int
}
queue := []Pair{
{root, root.Val},
}
res := 0
for len(queue) > 0 {
cur := queue[0]
queue = queue[1:]
node := cur.node
curVal := cur.val
if node.Left == nil && node.Right == nil {
res += curVal
}
if node.Left != nil {
queue = append(queue, Pair{node.Left, curVal*10 + node.Left.Val})
}
if node.Right != nil {
queue = append(queue, Pair{node.Right, curVal*10 + node.Right.Val})
}
}
return res
}
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用