[英]Java binary search tree delete
我正在为二进制搜索树编写一个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.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());
}
}
您的代码不会删除节点。 它只是清除它们。
为了实现删除你必须改变你的函数不为无效,但是:
private Node delete( E d, Node<E> 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());
}
}
你明白了...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.