[英]What's wrong with my insert() method in my Binary Search Tree implementation?
我试图创建一个递归方法来将一个元素插入到我的二叉搜索树中; 但是,我似乎在我的代码中找不到错误(我怀疑它与引用有关)。
public class BST<E extends Comparable<E>> {
private class BSTNode implements Comparable<BSTNode> {
public E data;
public BSTNode left;
public BSTNode right;
public BSTNode(E data) {
this.data = data;
}
@Override
public int compareTo(BSTNode o) {
return this.data.compareTo(o.data);
}
}
public BSTNode root;
public void insert(E data) {
insertRec(root, new BSTNode(data));
}
private void insertRec(BSTNode current, BSTNode newNode) {
if (current == null) {
current = newNode;
return;
}
if (current.compareTo(newNode) > 0) {
insertRec(current.right, newNode);
}
else if (current.compareTo(newNode) < 0) {
insertRec(current.left, newNode);
}
}
这没有任何意义:
if (current == null) {
current = newNode;
return;
}
current.right
和current.right
可以是null
,所以你永远不会真正向节点添加东西。
要设置您需要做的事情,即current.right = newNode
这应该有效:
public class BST<E extends Comparable<E>> {
private class BSTNode implements Comparable<BSTNode> {
public E data;
public BSTNode left;
public BSTNode right;
public BSTNode(E data) {
this.data = data;
}
@Override
public int compareTo(BSTNode o) {
return this.data.compareTo(o.data);
}
}
public BSTNode root;
public void insert(E data) {
root = insertRec(root, new BSTNode(data));
}
private BSTNode insertRec(BSTNode current, BSTNode newNode) {
if (current == null){
return newNode;
}
if (current.compareTo(newNode) > 0) {
current.right = insertRec(current.right, newNode);
} else {
current.left = insertRec(current.left, newNode);
}
return current;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.