您的位置:首页 > 其它

《leetCode》:Sum Root to Leaf Numbers

2016-02-28 20:05 316 查看

题目

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.


思路

第一步:找出所有的从root到叶子节点的路径

第二步:求和

实现代码如下:

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private List<List<Integer>> res=new ArrayList<List<Integer>>();//用来保存所有的路径
public int sumNumbers(TreeNode root) {
if(root==null){
return 0;
}
//第一步:找出所有的路径
sumNumbersHelper(root,new ArrayList<Integer>());
//求和
return sumAllList(res);
}

private int sumAllList(List<List<Integer>> listList) {
if(listList==null){
return 0;
}
int sum=0;
int listSum=0;
for(List<Integer> temp:listList){
listSum=0;//注意:要在这里初始化为零
for(Integer num:temp){
listSum=listSum*10+num;
}
sum+=listSum;
}
return sum;
}

private void sumNumbersHelper(TreeNode root,List<Integer> list) {
if(root==null){
return;
}
list.add(root.val);
if(root.left==null&&root.right==null){//到达叶子节点,保存此条路径
res.add(list);
return ;
}
else{
sumNumbersHelper(root.left,new ArrayList<Integer>(list));
sumNumbersHelper(root.right,new ArrayList<Integer>(list));
}
}
}


小结

原以为这道题自己做不出来的,写了写着思路就开了,太开兴了,哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: