2017-05-04 19 views
0

私は次のようなメソッドを記述しようとしています: BSTを指定すると、キー値が与えられた場合、キーよりも小さい値を持つノードの数を返すBSTsmallcountという再帰関数を作成します。あなたの関数はBSTのできるだけ少ないノードにアクセスする必要があります。バイナリ検索ツリー小カウント演習

これは私が持っているものです。

public int BSTsmallcount(BinNode root, int key) 
{ 
    int count = 0; 
    if (root.right < key) 
    { 
     count += BSTsmallcount(root.left, key); 
    } 
    if (root.left < key) 
    { 
     count += BSTsmallcount(root.right, key); 
    } 
    return count; 

} 

あなたは二項演算子を使用することはできませんので、しかし、これは正しくありません。どうすればこの問題を解決できますか?

+1

バイナリ演算子の制限を明確にしてください。あなたは本当に算術演算、ブール演算子、または建設演算子なしでこれを行うことになっていますか? '<'を使わなくてもこれを攻撃するのは変です。 – Prune

+0

私にはわかりませんが、これは私にこのエラーをもたらします:バイナリ演算子 '<'のオペランドタイプが正しくありません – Harshi

+1

何が原因でしょうか?コンパイラ?このエラーは、バイナリ演算子 '<'を使用しないことを示すものではありません。あなたが間違って '<'を使用していて、悪いパラメータを与えていると言われています。おそらくroot.rightとroot.leftは期待される型intではなくBinNode型であるからでしょう。 – ILMTitan

答えて

1

雅ので、あなただけの値を持つアドレスを比較することはできません、私はこれがあなたが

public int BSTsmallcount(BinNode root, int key) 
{ 
    if(root == NULL) return 0; 
    if (root.left.value < key) 
     return 1 + BSTsmallcount(root.left, key); 
    else 
     return BSTsmallcount(root.left, key); 
    if (root.right.value < key) 
     return 1 + BSTsmallcount(root.right, key); 
    else 
     return BSTsmallcount(root.right, key); 
} 

は、そのノードの値を格納するクラスBinNode内の属性が存在しなければならない必要なものだと思います。

+0

これはすべてのノードにヒットします。質問は最小の数字を打つことを望んでいます。 – ILMTitan

+0

それは私にこのエラーを与えました:シンボルを見つけることができません:変数値。私はcompareToメソッドを試してみましたが、どちらもうまくいきません。 – Harshi

+0

@HarshiここでBinNodeクラスの構造体を貼り付けることができます – zenwraight