BST - 查找元素数量

时间:2013-04-20 16:26:59

标签: c++

有没有办法找到二叉搜索树中的元素数量?

struct node
{
    node *p, *left, *right;
    int key;
};

这是我的节点结构,p指针指向父元素。

我需要找到这个数字来分配内存以搜索树并返回包含所有元素的数组。

我想出了类似的东西:

int numberOfElements(node *root, int count = 0)
{
    if(root)
    {
        numberOfElements(root->left, ++count);
        numberOfElements(root->right, ++count);
    }
    return count + 1;
}

但是,它显示了一些随机结果:P“1,2”显示2,“1,2,3,4,5,6,7”显示3等...

我想在一个函数中执行此操作,这就是为什么count是一个参数。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

你不需要第二个论点:

int numberOfElements(node *root) {
    if (root) {
        return 1 + numberOfElements(root->left) + numberOfElements(root->right);
    } else {
        return 0;
    }
}

答案 1 :(得分:2)

您似乎根本没有使用numberOfElements的返回值。 此版本可能有效:

int numberOfElements(node *root)
{
    if(root)
    {
        return numberOfElements(root->left) + 
               numberOfElements(root->right) + 1;
    }
    return 0;
}

通常,此类树的大小应记录在字段中,并在每次修改树时更新。没有人希望O(N)的运行时间只是为了找到一棵树的大小。