在BST的后序遍历中,在递归调用期间使用整数更新指针值

时间:2016-10-19 07:34:52

标签: c++ debugging pointers binary-search-tree

int MovieTree::countMovieNodes()
{
    int count = 0;
    int* c = &count;
    countMovieNodes(root,c);
    return *c;
}
void MovieTree::countMovieNodes(MovieNode *node, int *c)
{
    int count;
    if(node == NULL)
    {
        return;
    }
    else
    {
        count ++;
        countMovieNodes(node->leftChild, c);
        countMovieNodes(node->rightChild, c);
    }

}

我的代码返回0,所以显然我误解了更新指针值的方法。我该如何解决?我不认为我对BST的邮政订单遍历的逻辑是个问题。

2 个答案:

答案 0 :(得分:1)

如果你想保留你当前的格式,创建一个新的计数仍然是它的副本,只是直接指出指针:

int MovieTree::countMovieNodes()
{
    int count = 0;
    int* c = &count;
    countMovieNodes(root,c);
    return *c;
}
void MovieTree::countMovieNodes(MovieNode *node, int *c)
{
    if(node == NULL)
    {
        return;
    }
    else
    {
        ++*c;
        countMovieNodes(node->leftChild, c);
        countMovieNodes(node->rightChild, c);
    }
}

答案 1 :(得分:0)

您的代码实际上并未使用c参数(它只是将其传递给递归调用,这也不使用c)。您的代码还会在每次调用中创建一个本地count变量,该变量仅递增(不写入或读取)。

你应该做的是

  1. 删除int count;
  2. count ++;更改为(*c)++;(如果您不喜欢parens,则为*c += 1;)以增加顶级count来电中的countMovieNodes()变量)