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的邮政订单遍历的逻辑是个问题。
答案 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
变量,该变量仅递增(不写入或读取)。
你应该做的是
int count;
count ++;
更改为(*c)++;
(如果您不喜欢parens,则为*c += 1;
)以增加顶级count
来电中的countMovieNodes()
变量)