在二叉树中是否存在从根到叶的路径

时间:2017-07-13 18:50:09

标签: java tree binary-tree

我编写了一个小代码,当给出一个二叉树,一个数字时,当我们将节点值从根添加到叶子时,如果它等于数字,则返回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);

显然,上述陈述不起作用,但有没有这样的方法?我很抱歉提出这样一个基本问题,但我总是很难接受递归,而且它在树上增加了很多。

1 个答案:

答案 0 :(得分:0)

我建议编写一个单元测试,在程序上生成几组
1)所有真实的回答(以确保没有误报)
2)所有虚假回应(确保没有误报)
3)在编写函数时可能遇到的任何边缘情况(尽管它很简单,但实际上可能没有。)