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 '의 값은 무엇입니까? BTW : 적어도 모든 코드 경로가 값을 리턴하지는 않는다는 경고를 받아야합니다. –

+0

이것은 아마도 질문과 관련이 없지만, 이진 트리의 더 나은 reprenstation가 있습니다 : 현재 노드가 leaf인지 아닌지 알려주는 플래그를 추가하십시오. 그렇지 않다면 계속하십시오. 그렇지 않으면 그냥 반환하십시오. 수표와 가능한 오류를 피할 수 있습니다. – DaOnlyOwner

+0

- Stephen Lechner, h는 트리의 루트를 저장하는 데 사용되는 임시 노드입니다. –

답변

0

당신은 초기 포인터가 NULL 동일하지 있는지 확인해야합니다 내가 이것을에 추가 할 때

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

은 웹 사이트가 올바른되는 등의 제출을 ​​받아들입니다.