129. Sum Root to Leaf Numbers

题目:

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.

An example is the root-to-leaf path 1->2->3 which represents the number 123.

Find the total sum of all root-to-leaf numbers.

For example,

    1
   / \
  2   3

 

The root-to-leaf path 1->2 represents the number 12. The root-to-leaf path 1->3 represents the number 13.

Return the sum = 12 + 13 = 25.

 

Hide Tags

TreeDepth-first Search

链接:  http://leetcode.com/problems/sum-root-to-leaf-numbers/

6/8/2017

3ms, 9%

很长时间想不起来怎么做,把tree想成graph就搞定了

注意

1. 第22行还是要加上叶结点的值

2. 第25,32行需要加上当前节点的值,然后删掉。

 1 public class Solution {
 2     public int sumNumbers(TreeNode root) {
 3         if (root == null) {
 4             return 0;
 5         }
 6         List<Integer> ret = new ArrayList<Integer>();
 7         List<Integer> list = new ArrayList<Integer>();
 8         dfs(root, ret, list);
 9         int sum = 0;
10         for (int i = 0; i < ret.size(); i++) {
11             sum += ret.get(i);
12         }
13         return sum;
14     }
15     private void dfs(TreeNode root, List<Integer> ret, List<Integer> list) {
16         if (root.left == null && root.right == null) {
17             int number = 0;
18             for (int i = 0; i < list.size(); i++) {
19                 number = number * 10 + list.get(i);
20             }
21             number = number * 10 + root.val;
22             ret.add(number);
23             return;
24         }
25         list.add(root.val);
26         if (root.left != null) {
27             dfs(root.left, ret, list);
28         }
29         if (root.right != null) {
30             dfs(root.right, ret, list);
31         }
32         list.remove(list.size() - 1);
33     }
34 }

别人更简单的做法:

https://discuss.leetcode.com/topic/6731/short-java-solution-recursion

1 public int sumNumbers(TreeNode root) {
2     return sum(root, 0);
3 }
4 
5 public int sum(TreeNode n, int s){
6     if (n == null) return 0;
7     if (n.right == null && n.left == null) return s*10 + n.val;
8     return sum(n.left, s*10 + n.val) + sum(n.right, s*10 + n.val);
9 }

更多讨论

https://discuss.leetcode.com/category/137/sum-root-to-leaf-numbers

posted @ 2017-06-09 05:39  panini  阅读(132)  评论(0编辑  收藏  举报