题意:

image.png

解题思路:

  1. 思路:每个节点仅被遍历一遍,所以时间复杂度是 O(n)
  2. 1. 从根节点递归遍历整棵树,每进入下一个子树,将当前的sum*10再加上该树的val
  3. 2. 当遍历到叶节点时[左右子树为空],将路径总数添加到sum中;

PHP代码实现:

  1. class Solution {
  2. /**
  3. * @param TreeNode $root
  4. * @return Integer
  5. */
  6. private $sum = 0;
  7. function sumNumbers($root) {
  8. $this->dfs($root, $root->val);
  9. return $this->sum;
  10. }
  11. function dfs($root, $curSum) {
  12. if ($root->left == null && $root->right == null) {
  13. $this->sum += $curSum;
  14. return;
  15. }
  16. if ($root->left != null) {
  17. $this->dfs($root->left, $curSum * 10 + $root->left->val);
  18. }
  19. if ($root->right != null) {
  20. $this->dfs($root->right, $curSum * 10 + $root->right->val);
  21. }
  22. }
  23. }

GO代码实现:

  1. /**
  2. * Definition for a binary tree node.
  3. * type TreeNode struct {
  4. * Val int
  5. * Left *TreeNode
  6. * Right *TreeNode
  7. * }
  8. */
  9. var sum int
  10. func sumNumbers(root *TreeNode) int {
  11. sum = 0
  12. if root != nil {
  13. dfs(root, root.Val)
  14. }
  15. return sum
  16. }
  17. func dfs(root *TreeNode, curSum int) {
  18. if root.Left == nil && root.Right == nil {
  19. sum += curSum;
  20. return
  21. }
  22. if root.Left != nil {
  23. dfs(root.Left, curSum * 10 + root.Left.Val) //子节点 乘以10
  24. }
  25. if root.Right != nil {
  26. dfs(root.Right, curSum * 10 + root.Right.Val)
  27. }
  28. }