题目描述:具体描述见原题。简单来说就是找到二叉树根节点到叶子节点所有路径,将路径上节点元素组成数字,并求和返回。
解题思路:DFS递归,用数组记录每条完整路径上的数字,并求和。具体过程见代码。
具体代码:
func sumNumbers(root *TreeNode) int {
res, nums := 0, getNumbers(root)
for _, n := range nums{
temp, _ := strconv.Atoi(n)
res += temp
}
return res
}
func getNumbers(root *TreeNode) []string {
res := make([]string, 0)
if root == nil { // 递归终止条件
return res
}
if root.Left == nil && root.Right == nil { // 递归终止条件
res = append(res, strconv.Itoa(root.Val))
return res
}
left := getNumbers(root.Left) // 如果root节点存在左子树或者右子树,递归
for _, l := range left{
res = append(res, strconv.Itoa(root.Val) + l) // 存储左子树路径值
}
right := getNumbers(root.Right)
for _, r := range right{
res = append(res, strconv.Itoa(root.Val) + r) // 存储右子树路径值
}
return res
}
补充说明:无。