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; 
     } 
    } 
+0

どのようにこの関数を呼び出しますか(コードを示してください)。この時点で 'h 'の値は何ですか?ところで、少なくとも、すべてのコードパスが値を返すわけではないという警告を出すべきです。 –

+0

これはおそらく質問とは無関係ですが、バイナリツリーのより良いreprenstationがあります:現在のノードがリーフかどうかを示すフラグを追加します。そうでない場合は、続行します。あなたはチェックの束とその可能性のあるエラーを避けることができます。 – DaOnlyOwner

+0

- Stephen Lechner、hはツリーのルートを格納するために使用した一時ノードです。 –

答えて

0

あなたは最初のポインタがNULLと等しくないことを確認する必要があります。私はこの中を追加すると

int leftLeafSum(Node* root) 
{ 
    if (root==NULL) 
     return 0; 
    ... 

、ウェブサイトが正しいと提出を受け付けます。

関連する問題