我的逻辑是否正确?它给出了分段错误

时间:2013-11-12 13:28:59

标签: c++ c recursion binary-tree depth-first-search

我想在二叉树中找到从根到叶子的最大总和。 我最初在做: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; 
    } 
}

3 个答案:

答案 0 :(得分:0)

您必须错误地构建树。在某个地方,您正在访问未初始化的node root->并遇到段错误。

答案 1 :(得分:0)

嗯,你确定段错是来自那段代码吗?你调试过了吗? 我宁愿尝试这个:

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>
    }

}

答案 2 :(得分:0)

我想更好的实现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);
}