中级农民
- 积分
- 125
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-10-13
- 最后登录
- 1970-1-1
|
112 PATH SUM
自己的写法简直惨不忍睹。。。采用了一个个加,最后看是不是的写法
程序:
public class Solution {
private int total=0;private int flag=0;
public boolean hasPathSum(TreeNode root, int sum) {
if(root==null)
return false;
else
{
visited(root,sum);
}
if(flag==-1)
return true;
else
return false;
}
public void visited(TreeNode node,int sum)
{ total=total+node.val;
if(node.left!=null&&flag!=-1)
{
visited(node.left,sum);
}
if(node.right!=null&&flag!=-1)
{
visited(node.right,sum);
}
if(sum==total&&node.left==null&&node.right==null)
{
flag=-1;
}
else if(flag!=-1)
total=total-node.val;
}
}
然后看了看大神们简介的写法:
//九章DFS模板 dfs的结束条件是root没有子节点(root是叶子)
//然后 不用写for循环 因为是二叉树 只要分别递归左右子节点当新root即可。
//记得 (不管这个递归方法是怎么结束的 因为 只有一个onePath作为单条path的缓存
// 所以递归方法啊结束时候都要 onePath.remove(onePath.size()-1);
public class PathSum {
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null) {
return false;
}
sum = sum - root.val;
// 结束条件 当 到叶子节点时候sum==0
if (root.left == null && root.right == null) {
if (sum == 0) {
return true;
}
}
if(hasPathSum(root.left,sum)){return true;}
if( hasPathSum(root.right, sum)){return true;}
return false;
}
}
|
|