Java 二叉搜索树加法算法的实现
我必须在java中为BST实现一个add方法,但无法让add函数工作。有人能帮我吗Java 二叉搜索树加法算法的实现,java,algorithm,data-structures,binary-tree,binary-search-tree,Java,Algorithm,Data Structures,Binary Tree,Binary Search Tree,我必须在java中为BST实现一个add方法,但无法让add函数工作。有人能帮我吗 private boolean add(E x, BinaryNode<E> currentNode){ if (currentNode == null){ currentNode = new BinaryNode<>(x); size++; return true; }
private boolean add(E x, BinaryNode<E> currentNode){
if (currentNode == null){
currentNode = new BinaryNode<>(x);
size++;
return true;
}
if (currentNode.element.compareTo(x) == 0){
return false;
}
else if((currentNode.element.compareTo(x) < 0)){
if(currentNode.left == null){
currentNode.left = new BinaryNode<>(x);
size++;
return true;
} else {
add(x, currentNode.left);
}
}
else if(currentNode.element.compareTo(x) > 0){
if(currentNode.right == null){
currentNode.right = new BinaryNode<>(x);
size++;
return true;
} else {
add(x, currentNode.right);
}
}
return false;
}
public boolean add(E x){
return this.add(x, root);
}
private boolean add(ex,二进制节点currentNode){
if(currentNode==null){
currentNode=新的二进制节点(x);
大小++;
返回true;
}
if(currentNode.element.compareTo(x)==0){
返回false;
}
else if((currentNode.element.compareTo(x)<0)){
if(currentNode.left==null){
currentNode.left=新的二进制节点(x);
大小++;
返回true;
}否则{
添加(x,currentNode.left);
}
}
else if(currentNode.element.compareTo(x)>0){
if(currentNode.right==null){
currentNode.right=新的二进制节点(x);
大小++;
返回true;
}否则{
添加(x,currentNode.right);
}
}
返回false;
}
公共布尔加法(E x){
返回这个。添加(x,根);
}
我看到的一个问题是,当您分配根元素时,您将其分配给一个局部变量。这显然行不通
private boolean add(E x, BinaryNode<E> currentNode){
/////// REMOVE
if (currentNode == null){
currentNode = new BinaryNode<>(x);
size++;
return true;
}
///////
private boolean add(ex,二进制节点currentNode){
///////除去
if(currentNode==null){
currentNode=新的二进制节点(x);
大小++;
返回true;
}
///////
再加上这个
public boolean add(E x){
if( root == null ) {
root = new BinaryNode<>(x);
size++;
return true;
} else
return this.add(x, root);
}
公共布尔加法(ex){
if(root==null){
root=新的二进制节点(x);
大小++;
返回true;
}否则
返回这个。添加(x,根);
}
基本上,子树的根可能会改变,这是一个递归,为了使它工作,返回值应该是子树的新根,不管它是否改变
以下是Java中取自我的BST impl的add()方法,该方法通过了所有测试用例:
/**
* Add a new value.
*
* @param v
*/
@Override
public void add(T v) {
root = add(root, v);
}
/**
* Add to a subtree start from given node.
*
* @param current root of a subtree to add node to,
* @param v
* @return the new root of subtree,
*/
protected BSTNode<T> add(BSTNode<T> current, T v) {
if (current == null) { // subtree is empty,
size++;
return new BSTNode<>(v);
}
// compare,
int compareFlag = v.compareTo(current.value);
// check this or subtree,
if (compareFlag < 0) { // smaller, go to left subtree,
current.left = add(current.left, v);
} else if (compareFlag > 0) { // larger, go to right subtree,
current.right = add(current.right, v);
} else { // equals, ignore it,
}
return current;
}
/**
*添加一个新值。
*
*@param v
*/
@凌驾
公共空间添加(电视){
根=加(根,v);
}
/**
*从给定节点开始添加到子树。
*
*@param要添加节点的子树的当前根,
*@param v
*@返回子树的新根,
*/
受保护的BSTNode添加(BSTNode当前,T v){
如果(current==null){//子树为空,
大小++;
返回新节点(v);
}
//比较,,
int compareFlag=v.compareTo(当前值);
//选中此树或子树,
如果(compareFlag<0){//更小,则转到左子树,
current.left=add(current.left,v);
}否则,如果(compareFlag>0){//更大,则转到右子树,
current.right=add(current.right,v);
}否则{//equals,忽略它,
}
回流;
}
现在调用add()
时有什么问题?无论我调用函数多少次,它作为currentNode始终为null,因此它只进入第一个if语句