二进制树数算法不起作用



我正在编写一个程序,以尝试将叶子的叶子数在二进制树上。我所做的是检查当前的PTR是否是叶子,如果不是叶子,请继续前往下一个子树。但是,当我运行它时,它会不断返回2.我在做什么错?

我没有包含源代码,因为它相对标准(具有RLINK,LLINK等)。我运行此操作时没有错误:

template <class elemType>
long int bSearchTreeType<elemType>::getLeaves(nodeType<elemType> * current, long int count) const {
    if(current->rLink == NULL && current->lLink == NULL) {
        count += 1;
        return count;
    }
    if(current->rLink!=NULL) {
        getLeaves(current->rLink);
    }
    if(current->lLink!=NULL) {
        getLeaves(current->lLink);
    }
}
template <class elemType>
long int bSearchTreeType<elemType>::leaves() const {
    if(this->root!=NULL) {
        return this->getLeaves(this->root);
    }
}

编辑:我在参数列表中以count = 1声明了功能。那就是为什么我能够做到这一点。

我发现了一些问题。

1)您正在调用return this->getLeaves(this->root);,但是您在此处拥有的代码示例中没有使用该方法签名的方法。 bSearchTreeType<elemType>::getLeaves(nodeType<elemType> * current, long int count)

2)您的代码无法处理current可以为null的情况,即

       2
      /
     1

3)在穿越左侧和右子树后,您不会返回任何东西。

您可以写类似的东西

template <class elemType>
long int bSearchTreeType<elemType>::getLeaves(nodeType<elemType> * current) 
{
    if(current == NULL)
        return 0;
    if(current->rLink == NULL && current->lLink == NULL) 
        return 1;
    int leftSubTree = getLeaves(current->lLink);
    int rightSubTree = getLeaves(current->rLink);
    return leftSubTree + rightSubTree;
}

最新更新