0
このソリューションは、私が試したすべてのツリーでうまく動作しますが、セグメント化の失敗を示しています。誰も私がエラーを検出するのを助けることができます。 コード:バイナリツリー内の左の葉ノードの合計
/*Structure of the node of the binary tree is as
struct Node
{
int data;
struct Node* left;
struct Node* right;
};
*/
// function should return the sum of all
// left leaf nodes
int sum=0,i=1;
Node* h;
int leftLeafSum(Node* root)
{
if(i==1)
{
h=root;
i--;
}
Node* temp=root;
if((temp->left!=NULL)&&(temp->left->left==NULL)&& (temp->left->right==NULL))
sum+=temp->left->data;
if(temp->left!=NULL)
leftLeafSum(temp->left);
if(temp->right!=NULL)
leftLeafSum(temp->right);
if(temp==h)
{
i=1;
int s=sum;
sum=0;
return s;
}
}
どのようにこの関数を呼び出しますか(コードを示してください)。この時点で 'h 'の値は何ですか?ところで、少なくとも、すべてのコードパスが値を返すわけではないという警告を出すべきです。 –
これはおそらく質問とは無関係ですが、バイナリツリーのより良いreprenstationがあります:現在のノードがリーフかどうかを示すフラグを追加します。そうでない場合は、続行します。あなたはチェックの束とその可能性のあるエラーを避けることができます。 – DaOnlyOwner
- Stephen Lechner、hはツリーのルートを格納するために使用した一時ノードです。 –