2017-03-10 33 views
0

バイナリ検索ツリーの高さを返すメソッドを記述しました。再帰:再帰関数から値-1を返すには

今、再帰的な方法からheight - 1を返そうとしています。私は余分なif条件を追加してこれをやっています。

再帰関数からvalue - 1を返す良い方法はありますか?お使いのベースケースで

static int height(Node root) { 
    if (root == null) {  
     return 0; 
    } 

    if (root.left == null && root.right==null) {  
     return 1;    
    } else 
     // I want to return height - 1. 
     // For example if max height is 10, I wanted to return 9. 
     return (1 + Math.max(height(root.left), height(root.right)); 
    } 
} 

答えて

3

それぞれ返し-1と0:

static int height(Node root) { 
    if(root == null)  
     return -1; 
    if(root.left == null && root.right==null)  
     return 0;    
    else 
     return 1+ Math.max(height(root.left), 
        height(root.right)); 
} 

アップデートをコメントで述べた要件を満たすために:「私は、単一ノードの場合はnullノード、1は0を返すしたい場合はどう他のすべての場合は高さ-1の場合。

static int funny_height(Node root) { 
    int h = height(node); 
    return h <= 0 ? h + 1 : h; 
} 
+0

ヌルノードの場合は1、シングルノードの場合は1、それ以外の場合は1を返したい場合はどうすればよいですか。 例:7要素{3,2,1,5,4,6,7}のBSTの場合、メシドは4の代わりに3を返します。 –

+0

これはいくつかの異なるツリーに対して1を与えるので、やや矛盾します。しかし、本当にそれが欲しいなら、更新を見てください。 – Henry

+0

ありがとうございます。私は、これを達成するために別の関数を使用しなければならないことを確認したかったのですが、これは再帰では不可能です。同じ再帰関数を使ってこれを達成できると思いますか? –