2013-10-11 4 views
1

이진 검색 트리를 만드는 중이고 각 노드의 높이를 기록하고 합계하는 함수를 만들고 싶습니다. 재귀를 사용하려고합니다.이진 탐색 트리의 전체 높이

어려운 점은 각 노드에 높이를 지정하고 돌아가서 합산하는 것입니다. 한 번에 높이를 지정하고 기록 할 수 없다면? 미리 감사드립니다.

편집 : 미래에 이것을 보게 될 사람을 위해 나를 위해 일한 것을 보여주는 최종 코드. 도움을 주셔서 감사합니다.

BST.h 

    int totalheight(node); 
    int getHeight(node); 

    class BST { 
    Node root; 
    public: 
     BST { root = NULL; } 
     int totalheight() 
     { return ::totalheight(root); 
    }; 


BST.cpp 

int totalHeight(BSTNode* node) 
{ 
    if (node == NULL) 
     return -1; 

    int leftHeight = getheight(node->left); 
    int rightHeight = getheight(node->right); 
    int totalheight = 1 + leftHeight + rightHeight; // +1 to count the root 

    return totalheight; 
} 

int getheight(BSTNode* node) 
{ 
    if (node == NULL) 
     return 0; 

     return 1 + max(getheight(node->left), getheight(node->right)); 
} 

main.cpp 

    int main() { 
     BST tree; // and various inserts 

     tree.totalheight(); 
    } // main 
+2

당신이 코드를 조금을 정렬 할 수 있습니다 여기에

전반적인 기능입니다? 'totalheigh (BSTNode *)','findheight()','getheight()'... 매개 변수가없는'totalheight()'... 조금 혼란 스럽습니다. – Angew

+0

당신은 주로 이름 짓기와 구문 문제를 겪고 있고 전략적 장소에서'+ 1'을 잊어 버린 것처럼 보입니다. – molbdnilo

+0

고정, 위 참조. 메인 파일에서 헤더 파일을 어떻게 호출하는지 보려면 헤더 파일을 포함 시켰습니다. – Dalkurac

답변

2

한 가지 문제는 여기에 있습니다 :

int myheight = max(leftheight, rightheight); 

그것은해야한다 :

int myheight = max(leftheight, rightheight) + 1; 

당신이 높이 노드에 대한 계정를 위해 하나가 필요합니다. 또한 표시된 코드에서 findHeightgetHeight이어야합니다.


int getheight(BSTNode* node) 
{ 
    if (node == null) 
     return 0; 
    else 
     return 1 + max(getHeight(node->left), getHeight(node->right)); 
} // getheight 
+0

왼쪽 또는 오른쪽 만 NULL이지만 둘 다 아닌 경우를 처리하는 방법에 대해서는 처음에는 동일하다고 생각했지만 기술적으로 이미 처리되었습니다. 첫 번째 if 체크는 -1을 반환하고 max() 호출은이를 "필터링"합니다. 이것은 또한 "findHeight"가 "getHeight"라고 가정한다고 가정합니다. –

+0

맞아, 내 코드를 조금 수정했다. 우리는 높이를 계산할 수있는이 신비한 'findHeight'를 알 필요가 없습니다. – pippin1289

+0

짧고 달콤합니다. 당신은 내 투표를 가지고;) –