leetcode:129. 求根到叶子节点数字之和

爱被打了一巴掌 2021-09-28 12:50 401阅读 0赞

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

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

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

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

示例 1:

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

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

  1. package LeetCode;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class SumNumbers {
  5. public int sumNumbers(TreeNode root) {
  6. if (root == null) return 0;
  7. List<String> strs = new ArrayList<>();
  8. dfs(root, strs, "");
  9. int res = 0;
  10. for (int i = 0; i < strs.size(); i++) {
  11. res += Integer.parseInt(strs.get(i));
  12. }
  13. return res;
  14. }
  15. public void dfs(TreeNode root, List<String> strs, String r) {
  16. if(root==null)return ;
  17. if (root.left == null && root.right==null) {
  18. r+=root.val;
  19. strs.add(r);
  20. return;
  21. }
  22. r += root.val;
  23. dfs(root.left, strs, r);
  24. dfs(root.right, strs, r);
  25. }
  26. public static void main(String[] args) {
  27. SumNumbers sumNumbers = new SumNumbers();
  28. TreeNode treeNode1 = new TreeNode(1);
  29. TreeNode treeNode2 = new TreeNode(2);
  30. //TreeNode treeNode3 = new TreeNode(3);
  31. treeNode1.left = treeNode2;
  32. // treeNode1.right = treeNode3;
  33. sumNumbers.sumNumbers(treeNode1);
  34. }
  35. }

发表评论

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

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

相关阅读