簡體   English   中英

在BST的后順序遍歷的遞歸調用期間,使用整數更新指針值

[英]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變量,該變量只會遞增(不會寫入或讀取)。

你應該做的是

  1. 刪除int count;
  2. 更改count ++; (*c)++; (或*c += 1;如果您不喜歡parens)在頂級countMovieNodes()調用中增加count變量)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM