2017-11-25 9 views
-1

저는 이진 트리에서 잎의 수를 얻으려고하는 프로그램을 작성하고 있습니다. 내가 한 일은 현재 ptr이 리프인지 아닌지를 확인한 후 계속해서 다음 하위 트리로 이동하는 것입니다. 그러나, 내가 그것을 실행할 때, 그것은 계속 돌아 간다 2. 내가 뭘 잘못하고 있니?이진 트리 numLeaf 알고리즘이 작동하지 않습니다.

상대적으로 표준 인 (rLink, lLink 등이 있기 때문에) 소스 코드를 포함하지 않았습니다. 이 때 실행할 때 오류가 없습니다 :

template <class elemType> 
long int bSearchTreeType<elemType>::getLeaves(nodeType<elemType> * current, long int count) const { 
    if(current->rLink == NULL && current->lLink == NULL) { 
     count += 1; 
     return count; 
    } 
    if(current->rLink!=NULL) { 
     getLeaves(current->rLink); 
    } 
    if(current->lLink!=NULL) { 
     getLeaves(current->lLink); 
    } 
} 

template <class elemType> 
long int bSearchTreeType<elemType>::leaves() const { 
    if(this->root!=NULL) { 
     return this->getLeaves(this->root); 
    } 
} 

편집 : 매개 변수 목록에서 count = 1 함수를 선언했습니다. 그게 내가 왜 그럴 수 있는지.

+0

뭔가를 작성할 수 있습니다. 다른 것들은 그렇지 않지만 void가 아닌 함수는 항상 ** 반환 값으로 끝나야합니다 **. –

+0

먼저 경고없이 컴파일 할 코드를 얻습니다. 나는 당신이 그것을 할 때 당신이 그것을 알아낼 것이라고 생각합니다. 그렇지 않은 경우 MCVE를 게시하십시오. https://stackoverflow.com/help/mcve –

+0

컴파일러에서 아무런 경고도하지 않습니다. –

답변

0

몇 가지 문제가 있습니다.

1) return this->getLeaves(this->root);으로 전화를 걸었으나 여기에있는 코드 샘플에 해당 메소드 서명이있는 메소드가 없습니다. bSearchTreeType<elemType>::getLeaves(nodeType<elemType> * current, long int count)

2) 코드는

 2 
    /
    1 

3) 왼쪽, 오른쪽 서브 트리를 통과 한 후 아무것도 반환하지 않는 것 같은 나무의 대한 current가 null 즉이 될 수있는 경우)를 처리하지 않습니다.

당신은 최초의 경우 문이 뭔가를 반환하는 두 가지 기능이

template <class elemType> 
long int bSearchTreeType<elemType>::getLeaves(nodeType<elemType> * current) 
{ 
    if(current == NULL) 
     return 0; 
    if(current->rLink == NULL && current->lLink == NULL) 
     return 1; 
    int leftSubTree = getLeaves(current->lLink); 
    int rightSubTree = getLeaves(current->rLink); 
    return leftSubTree + rightSubTree; 
}