您的位置:首页 > 其它

129. Sum Root to Leaf Numbers

2016-11-30 11:04 423 查看
乍看之下没什么难的,应该用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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: