と継承が(Javaで)バイナリツリーを実装するためのクラスを定義した:私は、バイナリ検索ツリーを実装したいOOP:私は(<em>再帰的に</em>)は再帰的なクラス定義
class BinaryTree {
protected int key;
protected BinaryTree left, right;
// some methods...
}
そこから、
class BinarySearchTree extends BinaryTree {
// ...
public BinarySearchTree search(int x) {
if (x == key)
return this;
if (x < key)
if (left != null)
return left.search(x); // (*)
else
if (right != null)
return right.search(x); // (*)
return null;
}
}
もちろん// (*)
でマークされた行はleft
beacauseコンパイルされませんとright
はちょうどBinaryTree
のある、WI:このような任意のsearch()
メソッドがあります。
left
とright
が実際にBinarySearchTree
のものでBinaryTree
スーパーからBinarySearchTree
が、を定義する方法がtheresのであれば、私は疑問に思って。
または、検索のものとの関係を実現するには、より良い方法があります。別のNode
クラスを定義する必要がありますか?テンプレートを使用すべきですか?再帰的定義をまったく避けるべきですか? ...
ここ2つの別々のクラスを持つのポイントは何ですか? search()メソッドをBinaryTreeに入れて、BinarySearchTreeを忘れるのはなぜでしょうか? –
はい、バイナリ*検索*ツリーとして編成されていないバイナリツリー内の 'search()'メソッドを許可すると、ツリーが大きくなったときにメソッドが計算的に扱いにくくなる可能性があるため "危険"になります: 'BinaryTree'検索'BinarySearchTree'はほとんどの対数であることが保証されていますが、これはアルゴリズムやデータ構造に関するものです。 – Giorgio
バイナリツリーをインターフェースにするというジェネリックのソリューションよりも洗練されたデザイン –