【问题标题】:Does a path exists from root to leaf in a Binary Tree二叉树中是否存在从根到叶的路径
【发布时间】: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


【解决方案1】:

我建议编写一个在程序上生成几组
的单元测试 1) 所有真实回复(确保没有假阴性)
2) 所有错误响应(确保没有误报)
3) 你在编写函数时可能遇到的任何边缘情况(尽管鉴于其简单性,它可​​能真的没有。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多