簡體   English   中英

我的邏輯正確嗎? 出現細分錯誤

[英]Is my logic correct? It is giving segmentation fault

我想在二叉樹中找到從根到葉的最大和。 最初我正在做: Answer= sum_to_leaf(root,0); 我知道另一種探索所有路徑並更新總和的最大值的方法。 我只想這樣做。

int sum_to_leaf(struct node* root, int sum)
{
    if(root == NULL)
        return sum;

    else if(root->left == NULL && root->right == NULL)
    {
        sum = sum + root->data;
        return sum;
    }
    else
    {
        sum = sum + root->data;
        if(sum_to_leaf(root->left, sum) > sum_to_leaf(root->right, sum))
        {
            sum = sum + sum_to_leaf(root->left, sum);
        }
        else
        {
            sum = sum + sum_to_leaf(root->right, sum);
        }
        return sum; 
    } 
}

您必須錯誤地構建樹。 您正在某個地方通過root->訪問未初始化的node root->並遇到段錯誤。

嗯,您確定段錯誤來自該代碼嗎? 你調試了嗎? 我寧願嘗試這樣:

int sum_to_leaf(struct node* root,int sum) {

    if(root==NULL) {
        return sum;    
    } else {
        sum=sum+root->data;
        int left_sum = sum_to_leaf(root->left, sum);
        int right_sum = sum_to_leaf(root->right, sum);

        return std::max(left_sum, right_sum); // need to #include <algorithm>
    }

}

我想實現ur算法的更好方法是:

int getSum(struct node* nd)
{
    if(nd==NULL)
        return 0;
    int sum_r = getSum(nd->right);
    int sum_l = getSum(nd->left);
    return nd->data + std::max(sum_r, sum_l);
}

暫無
暫無

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

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