2016-06-27 9 views
0

検索バイナリツリーで特定の高さにあるノードの数を計算する単純な関数を書きましたが、うまくいかないようです。 「hは」私は、ノードの数を計算する高さである検索のバイナリツリーの特定の高さにあるノード

int BinTree::nodiH(node* tree,int h,int& N) 
{ 
    int height = 0; 
    if(tree==NULL) 
     return 0; 

    height=max(nodiH(tree->left,h,N),nodiH(tree->right,h,N)); 

    if(height==h) 
     N+=1; 

    return 1+height; 
} 

int BinTree::nodiH(int h) 
{ 
    int N=0; 
    nodiH(root_,h,N); 

    return N; 
} 

:私の下 はコードを投稿してください。 この関数は、私が期待しているものを返さないため、なぜわかりません。 誰かがお手伝いできれば感謝します。

+1

ようこそ!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。詳しい読書:** [小規模プログラムのデバッグ方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

高さの定義は?葉ノードは高さが 'h = 1'であると仮定しているようですが、通常、高さの定義はルートへのパスのサイズです。 –

+1

'関数は私が期待しているものを返しません'何が** **関数が返すのですか?あなたは何を期待しましたか?入力ツリーはどのようなものでしたか? – user2079303

答えて

0

木の高さは、葉からではなく、根から測定されます。
(ノードの「高さ」は通常「深さ」とも呼ばれ、ルートからも測定されますが、混乱する可能性があります)

3つのケースがあります。非空のツリーのルートは、高さ1であると仮定すると

  • 「ツリー」は、葉又は所定の高さがゼロです。このツリーにはそのようなノードはありません。
  • 興味深い高さは1です。ここに1つのノード(tree)があります。
  • それ以外の場合は、両方のサブツリーのノードの合計がheight - 1になります。このよう

:スタックオーバーフローへ

int BinTree::nodiH(const node* tree, int h) 
{ 
    if (tree == nullptr || h <= 0) 
    { 
     return 0; 
    } 
    else if (h == 1) 
    { 
     return 1; 
    } 
    else 
    { 
     return nodiH(tree->left, h - 1) + nodiH(tree->right, h - 1); 
    } 
} 
+0

私は間違って救いました。私はそれを変更することはできません。 –

+0

あなたの答えをありがとう、しかし、私は、特定の高さでノードの数を計算する必要があります:例えば、私はこのバイナリツリーを持っている場合 [リンク](https://www.cs.cmu.edu/~adamchik/ 15-121/lectures/Trees/pix/insertEx.bmp)と高さ3の出力は4です。 提案した関数がその深さまでのノード数を計算することを理解していると思います。 しかし私は間違っている可能性があります。 –

+0

私が完全に間違っていない限り、この関数は与えられた深さ(1はルートの深さ)のノード数を計算します。特定の深さまでのノード数を計算するには、再帰的ケースに '1 +'を追加します。 (例:あなたの例は4つのノードを持つ2つのレベルを持っているので、どれが3になっているのかはわかりません) – molbdnilo

関連する問題