leetcode-129

160 阅读1分钟

题目描述:具体描述见原题。简单来说就是找到二叉树根节点到叶子节点所有路径,将路径上节点元素组成数字,并求和返回。

解题思路: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
}

补充说明:无。