我想知道我是如何理解这一点的。我怎么知道一个节点是0还是2个孩子?这是我到目前为止,检查节点t是否有左右孩子。
public static boolean hasChildren(Node t) {
if (t.left == null && t.right == null){
return true;
}
return false;
}
答案 0 :(得分:3)
当left
和right
都是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);
最后一个表达式需要进行一些讨论,因为它会将left
和right
与null
进行比较,然后将这两个比较的结果进行比较,以产生最终结果。
要查看树中的所有节点是否有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;
}
}