【发布时间】:2017-07-14 03:15:00
【问题描述】:
我写了一个小代码,当给定一棵二叉树时,一个数字,当我们从根到叶的节点值相加时,如果它等于数字,则返回 true,否则返回 false。
boolean pathExists(BinaryTreeNode<Integer> root,int sum,int value) {
if(root==null)
return false;
sum=sum+root.data;
if(sum==value && root.left==null && root.right==null) {
return true;
}
boolean found=pathExists(root.left, sum,value);
if(found)
return true;
boolean check=pathExists(root.right, sum, value);
if(check)
return true;
sum=sum-root.data;
return false;
}
我认为它适用于所有测试用例,但如果它不适用于任何测试用例,请告诉我。我主要怀疑有没有更好的版本来用我已经完成的逻辑编写代码,比如让代码看起来更好?就像不是找到两个变量,检查然后通过将它们放入 if 语句中返回 true,是否可以像我们通常在递归问题中看到的那样将它们放入一行?像这样-
return pathExists(root.left, sum,value) || pathExists(root.right, sum,value);
显然,上述语句行不通,但有没有这样的方法?很抱歉提出这样一个基本问题,但我一直很难使用递归,而且它在树中增加了很多。
【问题讨论】:
-
这不是合适的网站。如果您的实际代码没有问题,我们将无法帮助您。如果我能给你一个建议,请为你的方法的每个可能的用例编写单元测试。它应该回答你的问题。
-
@davidxxx 兄弟,stackoverflow 不适合建议我编写的代码的更好替代方案吗?这就是真正的意思吗……?
-
没错 - 代码审查网站是您可以就工作代码寻求反馈的地方。
标签: java tree binary-tree