我编写了一个小代码,当给出一个二叉树,一个数字时,当我们将节点值从根添加到叶子时,如果它等于数字,则返回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;
}
我认为它适用于所有测试用例,但如果它对任何测试用例都不起作用,请告诉我。我的主要疑问是,有没有更好的版本用我已经完成的逻辑编写代码,比如让代码看起来更好?喜欢而不是找到2个变量,检查然后通过将它们放入if语句中返回true,是否可以将它们放入一行,就像我们通常在递归问题中看到的一样?像这样的东西 -
return pathExists(root.left, sum,value) || pathExists(root.right, sum,value);
显然,上述陈述不起作用,但有没有这样的方法?我很抱歉提出这样一个基本问题,但我总是很难接受递归,而且它在树上增加了很多。
答案 0 :(得分:0)
我建议编写一个单元测试,在程序上生成几组
1)所有真实的回答(以确保没有误报)
2)所有虚假回应(确保没有误报)
3)在编写函数时可能遇到的任何边缘情况(尽管它很简单,但实际上可能没有。)