如何检查树中的节点是否有0或2个子节点?

时间:2016-07-29 06:57:49

标签: java binary-search-tree

我想知道我是如何理解这一点的。我怎么知道一个节点是0还是2个孩子?这是我到目前为止,检查节点t是否有左右孩子。

public static boolean hasChildren(Node t) {
    if (t.left == null && t.right == null){
       return true;
    }
     return false;
 }

2 个答案:

答案 0 :(得分:3)

leftright都是null或两者都不是null时,您正在寻找一个正确的条件。这可以像这样表达

if (t.left == null && t.right == null) {
   return true;
}
if (t.left != null && t.right != null) {
   return true;
}
return false;
像这样

if ((t.left == null && t.right == null)
||  (t.left != null && t.right != null)){
   return true;
}
return false;
像这样

return (t.left == null && t.right == null)
    || (t.left != null && t.right != null);

或严肃的极客,如下:

return (t.left == null) == (t.right == null);

最后一个表达式需要进行一些讨论,因为它会将leftrightnull进行比较,然后将这两个比较的结果进行比较,以产生最终结果。

要查看树中的所有节点是否有0或2个子节点,您必须以递归方式执行此操作:

public static boolean isLeafOrHasTwoChildren(Node t) {
    // Both nulls
    if (t.left == null && t.right == null) {
        return true;
    }
    // One is null, the other one is not null
    if (t.left == null || t.right == null) {
        return false;
    }
    // Recurse down the tree
    return isLeafOrHasTwoChildren(t.left)
        && isLeafOrHasTwoChildren(t.right);
}

答案 1 :(得分:-1)

你需要这样的东西:

public static int hasChildren(Node t) {
    if (t.left == null && t.right == null){
       return 0;
    } else if (t.left != null && t.right != null){
       return 2;
    } else {
      return 1;
    }

 }