题目
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));
}
}
}
小结
原以为这道题自己做不出来的,写了写着思路就开了,太开兴了,哈哈