乍看之下没什么难的,应该用DFS,做起来发现确实也不难,DFS。
用STRING来储存当前值,到底了就转换成Integer然后添加到LIST里
最后LIST求和就行了。
public int sumNumbers(TreeNode root)
{
if(root == null) return 0;
List<Integer> resList = new ArrayList<Integer>();
helper(root,"",resList);
int res = 0;
for(int temp:resList)
{
res += temp;
}
return res;
}
public void helper(TreeNode root, String temp, List<Integer> resList)
{
if(root == null) return;
if(root.left == null && root.right == null)
{
int toAdd = Integer.valueOf(temp+Integer.toString(root.val));
resList.add(toAdd);
return;
}
if(root.left != null)
{
helper(root.left,temp+Integer.toString(root.val),resList);
}
if(root.right != null)
{
helper(root.right,temp+Integer.toString(root.val),resList);
}
return;
}
感觉上不是很难
另一种还是DFS 可以避免 使用数组 直接加每个NODE的VALLEVEL10
public int sumNumbers(TreeNode root)
{
return helper(root,0);
}
public int helper(TreeNode root, int total)
{
if(root == null) return 0;
if(root.left == null && root.right == null) return total*10 + root.val;
return helper(root.left,total*10+root.val) + helper(root.right,total*10+root.val);
}
简单多了。。
二刷。
和一刷一样
一刷一开始想成转换为SRING,不知道怎么有这种惊世骇俗的想法的。。
public class Solution {
public int sumNumbers(TreeNode root)
{
int res = 0;
if(root == null) return res;
return helper(root,0);
}
public int helper(TreeNode root, int val)
{
if(root == null) return 0;
int next = val*10 + root.val;
if(root.left == null && root.right == null) return next;
else return helper(root.left,next) + helper(root.right,next);
}
}
三刷。
post Order 和 pre Order的结合。
post是因为找到leave才能存储和,pre Order是因为必须提前添加数字。
public class Solution {
public int sumNumbers(TreeNode root) {
return helper(root, 0);
}
public int helper(TreeNode root, int temp) {
if (root == null) return 0;
temp = 10*temp + root.val;
if (root.left == null && root.right == null) {
return temp;
} else {
return helper(root.left, temp) + helper(root.right, temp);
}
}
}