📑 题目:129. 求根节点到叶节点数字之和

🚀 本题 LeetCode 传送门

题目大意

给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。

解题思路

  • 这一题是第 257 题的变形题,第 257 题要求输出每条从根节点到叶子节点的路径,这一题变成了把每一个从根节点到叶子节点的数字都串联起来,再累加每条路径,求出最后的总和。实际做题思路基本没变。运用前序遍历的思想,当从根节点出发一直加到叶子节点,每个叶子节点汇总一次。

代码

  1. package leetcode
  2. import (
  3. ""github.com/halfrost/LeetCode-Go/structures""
  4. )
  5. // TreeNode define
  6. type TreeNode = structures.TreeNode
  7. /**
  8. * Definition for a binary tree node.
  9. * type TreeNode struct {
  10. * Val int
  11. * Left *TreeNode
  12. * Right *TreeNode
  13. * }
  14. */
  15. func sumNumbers(root *TreeNode) int {
  16. res := 0
  17. dfs(root,0,&res)
  18. return res
  19. }
  20. func dfs(root *TreeNode,sum int,res *int) {
  21. if root == nil{
  22. return
  23. }
  24. sum = sum*10 + root.Val
  25. if root.Left == nil && root.Right == nil{
  26. *res += sum
  27. return
  28. }
  29. dfs(root.Left,sum,res)
  30. dfs(root.Right,sum,res)
  31. }