Java二进制搜索树删除
我正在为二叉搜索树编写一个delete方法,它不完整,但我填充了一个树,这样我至少可以测试我要删除的节点是一个叶子,但它似乎不工作的情况。我的逻辑有明显的错误吗Java二进制搜索树删除,java,binary-tree,Java,Binary Tree,我正在为二叉搜索树编写一个delete方法,它不完整,但我填充了一个树,这样我至少可以测试我要删除的节点是一个叶子,但它似乎不工作的情况。我的逻辑有明显的错误吗 public void delete(E d) { delete( d, root); } private void delete( E d, Node<E> T) { if(T == null) { return; } else if(d.equals(T.getD
public void delete(E d)
{
delete( d, root);
}
private void delete( E d, Node<E> T)
{
if(T == null)
{
return;
}
else if(d.equals(T.getData()))
{
System.out.println("it found the node at least");
if(T.getRight() == null && T.getLeft() == null)
{
T.setData(null);
}
//do alot)
}
else if(d.compareTo(T.getData()) > 0)
{
System.out.println("going right");
delete(d, T.getRight());
}
//s is less than T, insert on left subtree
else
{System.out.println("going left");
delete(d,T.getLeft());
}
}
公共作废删除(E-d)
{
删除(d,根);
}
私有无效删除(E-d,节点T)
{
如果(T==null)
{
返回;
}
else if(d.equals(T.getData()))
{
System.out.println(“它至少找到了节点”);
if(T.getRight()==null和&T.getLeft()==null)
{
T.setData(空);
}
//做很多事情)
}
else if(d.compareTo(T.getData())>0)
{
System.out.println(“向右转”);
删除(d,T.getRight());
}
//s小于T,在左子树上插入
其他的
{System.out.println(“向左走”);
删除(d,T.getLeft());
}
}
您的代码不会删除节点。它只是清除它们。为了实现删除,您必须将函数更改为无效,但:
private Node delete(ed,Node T)
您的代码应该是这样的:
public void delete(E d) {
root = delete( d, root);
}
private void delete( E d, Node<E> T)
{
if(T == null)
{
return;
}
else if(d.equals(T.getData()))
{
System.out.println("it found the node at least");
if(T.getRight() == null && T.getLeft() == null)
{
return null;
}
//do alot)
}
else if(d.compareTo(T.getData()) > 0)
{
System.out.println("going right");
T.right = delete(d, T.getRight());
}
//s is less than T, insert on left subtree
else
{
System.out.println("going left");
T.left = delete(d,T.getLeft());
}
}
公共作废删除(E-d){
根=删除(d,根);
}
私有无效删除(E-d,节点T)
{
如果(T==null)
{
返回;
}
else if(d.equals(T.getData()))
{
System.out.println(“它至少找到了节点”);
if(T.getRight()==null和&T.getLeft()==null)
{
返回null;
}
//做很多事情)
}
else if(d.compareTo(T.getData())>0)
{
System.out.println(“向右转”);
T.right=delete(d,T.getRight());
}
//s小于T,在左子树上插入
其他的
{
System.out.println(“向左走”);
T.left=delete(d,T.getLeft());
}
}
你明白了…什么是
//do alot)
?另外,将数据设置为null
并不是我所说的删除。do alot意味着对其余情况进行编码。我该如何删除它?有什么问题吗?无法搜索节点吗?