![](/img/trans.png)
[英]My BreadthFirstTraversal implementation giving segmentation fault
[英]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.