首先,我搜索了 java 中泛型类型的用法,但是我发现的答案太简单或太复杂了。所以这是我的确切问题。
我有三个类,分别是 PerfectTreeControl、Tree 和 Entry。
树有
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 是原始类型,应该进行参数化,并且它仍然可以正常工作。
我的第二个问题是关于检查一棵树是否完美。以下是我到目前为止尝试过的一些代码:
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 并且一次又一次没有区别。代码不能正常工作,我完全糊涂了。