【发布时间】:2020-03-15 14:22:49
【问题描述】:
对于类,我需要创建自己的二叉搜索树实现,包括搜索、添加、删除和 toString 方法,但如果不先添加,我无法尝试这些方法。我不允许编写或使用节点类。我的树的每个节点都应该是 BinarySearchTree 类的一个实例。我无法弄清楚如何在没有典型节点的情况下遍历树。这是我的第一部分代码:
public class BinarySearchTree<E extends Comparable<E>> implements BinarySearchTreeInterface<E> {
E value;
BinarySearchTree<E> parent;
BinarySearchTree<E> left;
BinarySearchTree<E> right;
static String draw;
public BinarySearchTree() {
value = null;
parent = null;
left = null;
right = null;
}
@Override
public void add(E item) {
if (isRoot() && value == null) {
value = item;
} else if (value.compareTo(item) > 0) {
if (right != null) {
add(right.value);
} else {
BinarySearchTree<E> newNode = new BinarySearchTree<E>();
newNode.value = item;
newNode.right = newNode;
}
}else if (value.compareTo(item) < 0) {
if (left != null) {
add(left.value);
}
} else {
BinarySearchTree<E> newNode = new BinarySearchTree<E>();
newNode.value = item;
newNode.left = newNode;
}
}
这似乎只添加了 5 的根值。我相信这与未将新“节点”连接到父节点或我的构造函数有关。我正在努力遍历树并在不使用节点类的情况下连接“节点”。
【问题讨论】:
-
尝试使用 right.add(item);和 left.add(item) 而不是 add(left.value);
-
我刚刚注意到您有一个名为 isRoot() 的方法,但您没有包含它......它是如何工作的?
-
@LowKeyEnergy 它检查 if(parent == null);根没有父节点,因此如果节点是根,则返回 true。修复递归语句后,代码现在可以工作了。
标签: java generics binary-search-tree add