java - Java中二叉树的递归检查

标签 java recursion tree binary-tree

这是以下 Java 谜题 ( http://code-exercises.com/programming/medium/28/strict-binary-tree-check ) 中的一个小问题。任务是编写一个方法来检查给定二叉树中的所有节点是否具有 0 个或 2 个子节点。

他们的解决方案如下

public Boolean isStrictTree(TreeNode node) {
    if (node == null) {return true;}
    if ((node.left() == null && node.right() != null) || (node.left() != null && node.right() == null)) {return false;}

    return isStrictTree(node.left()) && isStrictTree(node.right());
}

我想出了类似的东西,但它不起作用。区别在于

a) 第一行 - 处理 null 情况(返回“null”而不是“true”)

b)递归的结构 - 我的递归结构以某种方式混杂在一起(如果我追踪一张纸上发生的情况,这种方式应该有效),而不是将其分散在两行上的解决方案 - 条件和返回语句。

public Boolean isStrictTree(TreeNode node) {
    if (node == null) {return null;}

    else if ((isStrictTree(node.left()) == true) && (isStrictTree(node.right())==null)) {return false;}

    return true;
}

脚本运行但不返回任何内容。我真的很想了解为什么它不起作用,似乎我可以在这里学到一些东西,所以任何见解都会受到赞赏。

最佳答案

您有两个选择:要么节点有效/平衡,然后返回 true,要么节点无效/不平衡,返回 false。为什么要引入第三种状态 - null?不需要那个东西。

为什么它不起作用:在 (isStrictTree(node.left()) == true 中,对 isStrictTree(...) 的调用将返回 null 在某个时间点,因此当将其与 true 进行比较时,您会得到 NullPointerException。

关于java - Java中二叉树的递归检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42032618/

相关文章:

c - 指针在 if/else 语句之前有地址,但立即更改为 0x0

java - JNI -- native 方法上的 UnsatisfiedLinkError

java - 在安装程序未安装 jdk/jre 的 Windows 操作系统上启动 jarsigner.exe

javascript - 如何在从根遍历到json树的目标 Node 时插入键?

C++递归查找字符串数组中的最小元素

javascript - jQuery - 未捕获范围错误 : Maximum call stack size exceeded

python - 如何展平解析树并存储在字符串中以进行进一步的字符串操作python nltk

java - 如何在单一方法上实现两种税率?

Java ByteArrayOutputStream 到不同的容器中

algorithm - 从分层路径创建序数值