2016-07-20 16 views
0
bool roottoleafsumequaltox(BinaryTreenode<int>* root, int &x) 
{ 
    if(root == NULL) 
    { 
     return (x==0); 
    } 
    else 
    { 
    bool ans = false; 
    x = x - root->data; 

    if(x == 0 && root->left == NULL && root->right == NULL) 
    { 
     return true; 
    } 

    if(root->left) 
     ans = ans || roottoleafsumequaltox(root->left, x); 

    if(root->right) 
     ans = ans || roottoleafsumequaltox(root->right, x); 

    return ans; 
    } 
} 

ルートからリーフまでの合計が与えられたxと等しいかどうかを返す必要があります。私は問題が参照渡しにあると思うし、私はそれを検出できません... それは本当であるとしても、それは常に答えとして偽を与える!C++再帰で参照渡し

答えて

1

は、私はあなたが欲しい何をすべきかunderstanするかわからないが、私はあなたが

ans= ans || roottoleafsumequaltox(root->left, x); 
ans = ans || roottoleafsumequaltox(root->right, x); 

xからroottoleafsumequaltox()を渡す渡すとき、問題はあなたがそうx

x= x- root->data; 

変更することである疑いがありますx変更された値を持つ

xを変更することはできませんこのように、あなたのif

if((x == root->data) && (root->left == nullptr) && (root->right == nullptr)) 
1

を書くdははい、問題が参照渡しです。 x値は各ノードのトラバーサルで減少し続けます。

ちょうど参照渡しを取り除く、その後、更新:

roottoleafsumequaltox(root->left/right, (x - root->data)) 

(leaf_node->data == x)のためにチェックしてください。

すでに葉へのルート(または他のノード)からのルートの一つが合計を与えることを発見した場合、最適化のために、あなたにも、右childtreeを行って、チェックしていない、確認してください== xその位置で)。