最初に、Java でのジェネリック型の使用法について検索しましたが、見つけた答えはあまりにも単純または複雑でした。だからここに私の正確な質問があります。
それぞれPerfectTreeControl、Tree、およびEntryの3つのクラスがあります。
ツリーは
public class Tree<K> { public Entry <K> root;
エントリーは
public class Entry<K> {
public K element;
public Entry<K> parent, left_child, right_child;
public Entry(K element) {
this.element = element;
}
public Entry(K element, Entry<K> left, Entry<K> right) {
left_child = left;
right_child = right;
this.element = element;
}
Entry 親と Entry <K> 親の違いは何ですか? 整数、文字列、または私が望むものとして使用できることは知っていK element
ますが、同じことがオブジェクトにも当てはまりますか? パラメータなしで Entry 変数を使用しようとしましたが、 Entry は生の型であり、パラメータ化する必要があり、エラーなしで動作しているとしか言いませんでした。
2 番目の質問は、ツリーが完全かどうかをチェックすることです。これまでに試したいくつかのコードは次のとおりです。
public class PerfectTreeControl {
public static boolean isPerfect(Tree<String> tree) {
Tree t1 = new Tree();
if( t1.isFull( tree.root ) ) {
int depth = t1.height(tree.root);
return t1.everyLeafHasSameDepth(tree.root, depth);
}
else
return false;
}
}
public class Tree<K> {
public Entry <K> root;
public boolean isLeaf(Entry e) {
return e.left_child == null &&
e.right_child == null;
}
public int height(Entry e) {
if( e == null ||
e.left_child == null &&
e.right_child == null )
return 0;
int left = height( e.left_child );
int right = height( e.right_child );
return 1 + Math.max(left, right);
}
public boolean isFull(Entry base) {
if( isLeaf(base) )
return true;
else
if( base.left_child != null && base.right_child != null ) {
return isFull(base.left_child) &&
isFull(base.right_child);
} else {
return false;
}
}
public int depth(Entry e) {
if( e == root ) {
return 0;
} else {
return 1 + depth(e.parent);
}
}
public boolean everyLeafHasSameDepth(Entry base, int depth) {
if( base == null )
return false;
else if(isLeaf(base) )
return depth( base ) == depth;
else {
return
everyLeafHasSameDepth(base.left_child, depth) &&
everyLeafHasSameDepth(base.right_child, depth);
}
}
- エントリークラス(トップに書いた) ご覧のとおり、PerfectTreeControl クラスの isPerfect メソッドは Tree -String- tree をパラメータとして使っていて、それが何なのかさっぱりわかりません。Tree クラスでは、 Entry を and で試してみましたが、やはり違いはありませんでした。コードが正しく動作せず、完全に混乱しています。