Java中二叉树的递归检查

Java中二叉树的递归检查,java,recursion,tree,binary-tree,Java,Recursion,Tree,Binary Tree,下面是以下Java难题()中的一个小问题。任务是编写一个方法,检查给定二叉树中的所有节点是否都有0或2个子节点 他们的解决方案如下 public Boolean isStrictTree(TreeNode node) { if (node == null) {return true;} if ((node.left() == null && node.right() != null) || (node.left() != null && node.

下面是以下Java难题()中的一个小问题。任务是编写一个方法,检查给定二叉树中的所有节点是否都有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) 第1行-处理空案例(返回“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。请提供整个MCVE。添加一个驱动问题结果的主程序。我很好奇具有定义的返回类型和值的例程如何“不返回任何内容”.从语义上讲,这是不可能的。