バイナリーサーチツリーで高さを探す
二分探索木の高さを求める方法を作り直したいのですが、どなたか手伝っていただけないでしょうか。今のところ、私のコードは次のようになっています。しかし,得られる答えは実際の高さよりも1だけ大きいのです。しかし,return文から+1を取り除くと,実際の高さよりも1だけ小さくなります。これらのBSTを使った再帰については,まだ理解できていません。何かアドバイスがあればお願いします。
public int findHeight(){
if(this.isEmpty()){
return 0;
}
else{
TreeNode<T> node = root;
return findHeight(node);
}
}
private int findHeight(TreeNode<T> aNode){
int heightLeft = 0;
int heightRight = 0;
if(aNode.left!=null)
heightLeft = findHeight(aNode.left);
if(aNode.right!=null)
heightRight = findHeight(aNode.right);
if(heightLeft > heightRight){
return heightLeft+1;
}
else{
return heightRight+1;
}
}
55
3
二分探索木の高さは,「層の数-1」に等しい。
http://en.wikipedia.org/wiki/Binary_tree の図を参照してください。
あなたの再帰性は良好なので、ルートレベルで1を引くだけです。
また、NULLノードを処理することで、この関数を少しきれいにすることができます。
私の意見では、あなたのコードは少しシンプルにした方が良いと思います。子ポインタがnullになったときに再帰を終了させるのではなく、current***ポインタがnullになったときにのみ再帰を終了させるようにします。そうすれば、コードはずっとシンプルに書けるようになります。疑似コードでは次のようになります。
ここでは、それを簡潔に、できれば正しく表現しています。
カレントノードがNULLの場合、ツリーは存在しません。 子ノードが両方ともnullの場合は、1つのレイヤーがあり、高さは0です。 これは、高さの定義(Stephenが言及している)を# of layers - 1として使用しています。