繁体   English   中英

Java二进制搜索树删除

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM