2017-11-25 4 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)あなたのコードはcurrentがヌルすなわちことができるケースを処理しません)木の

 2 
    /
    1 

3等のための)あなたは左と右のサブツリーを横断した後に何かを返すされていません。

あなたが最初にif文が何かを返し、両方の機能で、この

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; 
} 
関連する問題