2013-04-14 3 views
2

이진 트리의 높이를 가져 오는 함수를 작성하려고합니다. maxi의 값을 인쇄 할 때 값은 예상 한 값이지만 함수가 값을 반환하면 값은 항상 0입니다. 누군가 내가 여기서 잘못하고있는 것을 말할 수 있습니까?이진 트리 높이 찾기

int treeHeight(tree *p) 
{ 
    static int maxi=0; 
    static int i=0; 
    if(p==NULL) 
    { 
     return maxi; 
    } 
    else 
    { 
     if(p->left!=NULL||p->right!=NULL) 
     { 
      i++; 
     } 
     else 
     { 
      i++; 
      if(maxi<i) 
      { 
       maxi=i; 
      } 
     } 
     treeHeight(p->left); 
     treeHeight(p->right); 
     i--; 
    } 
} 
+3

경고를 비활성화하지 않은 경우 컴파일러는 잊어 버린 것을 말했을 것입니다. –

답변

7

귀하의 treeHeight 기능은 다음과 같이한다 :

int treeHeight(tree *p) 
{ 
    if (p == NULL) 
    { 
     return -1; 
    } 

    int left = treeHeight(p->left); 
    int right = treeHeight(p->right); 

    return 1 + std::max(left, right); 
} 

왜 변수를 정적으로해야합니까 i 거기 maxi? 바이너리 트리의 높이를 찾기 위해 그 변수가 필요하지 않습니다.

+0

Line 3 Mistake on line # 3. –

+0

@Haroogan 죄송합니다, 부주의하고 멍청합니다. 감사. – taocp

+0

여기에 유용한 std :: max() 함수가 있습니다. 그리고 뿌려 져야하는'const' 키워드가 있습니다. 그것보다 훨씬 명확한 코드! –