寻找树上的叶子的左孩子

时间:2015-07-01 19:35:31

标签: java binary-tree

我正在试图找到树上留下的左边孩子的数量。我想做递归但我不能接受零以外的输出。谢谢。

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++;
            }
    }

2 个答案:

答案 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)