[英]C++: Odd sum of values of the binary tree
嘗試編寫一個將二叉樹的所有奇數元素求和的程序。 但是我的代碼(函數odd_sum)僅返回第一個奇數元素。 我的錯誤在哪里?
/*Creating abd printing tree*/
int odd_sum(node *root)
{ if (root == NULL) return 0;
return root->info % 2 != 0 ? root->info:0 + odd_sum(root->left) +
odd_sum(root->right);
}
int main()
{
int k,sum,h=0;
node *der=tree();
if (!der) printf ("No tree");
else
{
node *root=der,*qwe=der;
sum=odd_sum(root);
print_tree(der,h);
printf ("\nOdd sum :%d\n\n\n",sum);}
return 0;
}
如果您在樹中遇到一個odd
,則只返回它的值而不分支到樹上,這就是為什么只得到第一個奇數的原因。
您的代碼的更正版本在以下行上:
int odd_sum(node *root){
if (root == NULL) {
return 0;
}
else {
int add = 0;
if(root->info % 2 != 0) add = root->info;
return add + odd_sum(root->left) + odd_sum(root->right);
}
}
您需要遍歷樹,每當找到具有奇數值的節點時,就可以更新Sum變量。
void oddSum(node *root, int &Sum){
if(!root)
return;
if((root->val) & 1)
Sum += root->val;
oddSum(root->left, Sum);
oddSum(root->right, Sum);
}
傳遞根和Sum變量作為參考,在遞歸結束時,您將找到存儲在Sum中的樹的奇數值之和。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.