LeetCode129. 求根到叶子节点数字之和

阳光穿透心脏的1/2处 2022-05-11 09:30 279阅读 0赞

给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。

例如,从根到叶子节点路径 1->2->3 代表数字 123

计算从根到叶子节点生成的所有数字之和。

说明: 叶子节点是指没有子节点的节点。

示例 1:

  1. 输入: [1,2,3]
  2. 1
  3. / \
  4. 2 3
  5. 输出: 25
  6. 解释:
  7. 从根到叶子节点路径 1->2 代表数字 12.
  8. 从根到叶子节点路径 1->3 代表数字 13.
  9. 因此,数字总和 = 12 + 13 = 25.

示例 2:

  1. 输入: [4,9,0,5,1]
  2. 4
  3. / \
  4. 9 0
  5. / \
  6. 5 1
  7. 输出: 1026
  8. 解释:
  9. 从根到叶子节点路径 4->9->5 代表数字 495.
  10. 从根到叶子节点路径 4->9->1 代表数字 491.
  11. 从根到叶子节点路径 4->0 代表数字 40.
  12. 因此,数字总和 = 495 + 491 + 40 = 1026.

思路:深度优先遍历二叉树。

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public int sumNumbers(TreeNode root) {
  12. List<Integer> res=new LinkedList<Integer>();//保存根结点到叶子结点的所有路径值
  13. String tmp="";//临时存储根结点到叶子结点的路径值
  14. dfs(root,res,tmp);//深度优先遍历二叉树
  15. int sum=0;//所有路径和
  16. for(Integer i:res){
  17. sum+=i;
  18. }
  19. return sum;
  20. }
  21. public void dfs(TreeNode root, List<Integer> res,String tmp){
  22. if(root==null){
  23. return ;
  24. }
  25. if(root.left==null&&root.right==null){ //叶子结点
  26. tmp+=root.val;
  27. int n=Integer.parseInt(tmp);
  28. res.add(n);
  29. return ;
  30. }
  31. tmp+=root.val;
  32. dfs(root.left,res,tmp);
  33. tmp.substring(0,tmp.length()-1);
  34. dfs(root.right,res,tmp);
  35. tmp.substring(0,tmp.length()-1);
  36. }
  37. }

发表评论

表情:
评论列表 (有 0 条评论,279人围观)

还没有评论,来说两句吧...

相关阅读