[英]Updating a pointer value with an integer during a recursive call in postorder traversal of a BST
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的后遍歷邏輯不成問題。
如果您想保留當前格式,則創建新計數仍是它的副本,只需直接確定指針:
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);
}
}
您的代碼實際上並不使用c
參數(它只是將其傳遞給遞歸調用,后者也不使用c
)。 您的代碼還會在每個調用中創建一個本地count
變量,該變量只會遞增(不會寫入或讀取)。
你應該做的是
int count;
count ++;
到(*c)++;
(或*c += 1;
如果您不喜歡parens)在頂級countMovieNodes()
調用中增加count
變量)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.