所以我设法使用数组在Java中制作BST,但是一位朋友告诉我他已经完成了使用数组。我大致知道他是如何做到的这里是一个例子(我遗漏了构造函数和getter和setter):
class TreeNode implements Comparable<TreeNode>
{
private int value;
private TreeNode leftChild;
private TreeNode rightChild;
private TreeNode parent;
正如您所看到的,您可以链接左侧和右侧节点,但这让我了解了add方法的工作原理。到目前为止,我刚刚初始化了一个像这样的新对象:
public void add(Comparable c)
{
TreeNode node = new TreeNode(c);
}
但是,如果我无法像在数组中一样访问它,我想知道如何链接到前一个对象?每当我去链接一个对象时,我最终会添加一个新对象。我对如何实现这个方法感到困惑,你会怎么做?
答案 0 :(得分:1)
我非常确定你要做的是类似于此的事情:
class TreeNode<T extends Comparable<T>> {
private T value;
private TreeNode<T> left;
private TreeNode<T> right;
private TreeNode<T> parent;
public TreeNode(TreeNode parent, T value) {
this.parent = parent;
this.value = value;
}
public TreeNode<T> add(T t) {
if(t.compareTo(value) < 0) {
if(left == null) {
left = new TreeNode(this, t);
return left;
} else {
return left.add(t);
}
} else {
if(right == null) {
right = new TreeNode(this, t);
return right;
} else {
return right.add(t);
}
}
}
public boolean find(T t) {
if(t.equals(value)) {
return true;
} else {
if(t.compareTo(value) < 0) {
if(left == null) {
return false;
} else {
return left.find(t);
}
} else {
if(right == null) {
return false;
} else {
return right.find(t);
}
}
}
}
}
class Tree<T extends Comparable<T>> {
private TreeNode<T> topElement;
public TreeNode<T> add(T t) {
if(topElement == null) {
topElement = new TreeNode(null, t);
return topElement;
} else {
return topElement.add(t);
}
}
public boolean find(T t) {
if(topElement == null) {
return false;
} else {
return topElement.find(t);
}
}
}