• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:二分探索木のheightを見つけるアルゴリズム2)

二分探索木のheightを見つけるアルゴリズムについて

このQ&Aのポイント
  • 前回の質問で頂いた回答を元に、私が作成したアルゴリズムでは正しく動作していないようです。
  • アルゴリズムの問題点は、左と右の値を比較しているため、入力値によって偶然に正しく動作してしまっていたということです。
  • 正しいアルゴリズムでは、左と右の高さを比較する必要があります。しかし、どうしても行き詰まってしまいました。ヒントをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • fiva205c
  • ベストアンサー率43% (234/533)
回答No.1

再帰処理ですね。最近やってないからなあ・・・ public int height(IntBSTNode p, int h) { int hl, hr; if(p = NULL) { return(h); } hl = height(p.left, h); hr = height(p.right, h); if (hl > hr) { return(hl+1); } else { return(hr+1); } } ・自分自身がNULLだったら、カウントアップせずそのまま返る。 ・左右それぞれにたどっていき、大きい(深い)ほうを採用し、+1して返る 呼ぶときに+1するのではなく、返るときに+1するようにしています(NULLにあたったら+1しないため)

ginkgo
質問者

お礼

はい、ちゃんと動作していてます! 呼ぶときではなく、返るときに+1するのですね。 それとよくよく考えると、呼び出されたときにnullならそのまま返ってくるので p.leftとp.rightがnullかどうかなんて判断しなくてもよかったんですね。 とても勉強になりました。 本当に、本当に助かりました。 ありがとうございました!

すると、全ての回答が全文表示されます。

関連するQ&A