[英]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.