我正在试图找到树上留下的左边孩子的数量。我想做递归但我不能接受零以外的输出。谢谢。
public int countLeftChildren() {
if (nodex != null) {
if(nodex.left != null) {
nodex = nodex.getLeft();
countLeftChildren();
}
if(nodex.right != null) {
nodex = nodex.getRight();
countLeftChildren();
}
if(nodex.left == null && nodex.right == null && nodex==nodex.getParent().getLeft()) {
countLeftChildren++;
}
}
答案 0 :(得分:0)
我认为您要将nodex.getParent().getRight()==null
替换为nodex.getParent().getLeft()==nodex
,以确定当前节点实际上是一个左子节点。是否还有一个合适的孩子应该是无关紧要的。
但是,你的方法有点奇怪。这就是我编码的方式:
class MyNode {
...
public int countLeftChildren() {
int cnt = 0;
if(left != null) {
cnt += left.countLeftChildren();
}
if(right != null) {
cnt += right.countLeftChildren();
}
if(left == null && right == null && getParent().left ==this){
cnt = 1;
}
return cnt;
}
}
答案 1 :(得分:0)
您正在为节点使用单个变量nodex
。这会导致意外行为:算法不会遍历整个树,而是遍历树的最左侧路径。除非路径末尾的叶子的父节点没有正确的子节点,否则算法将始终导致0.除此之外,由于最后一个return语句是缺失(所有return语句都在if子句中)。您将不得不使用另一种方法解决此类问题:
countLeafsLeft(node n)
if n == NULL
return 0
//this node is a leaf and the left child of it's parent
if n.left == NULL AND n.right == NULL AND n.parent != NULL AND n.parent.left == THIS
return 1
int tmp = 0
if n.left != NULL
tmp += countLeafsLeft(n.left)
if n.right != NULL
tmp += countLeafsRight(n.right)