二叉搜索树删除方法

时间:2013-12-18 16:55:24

标签: java

我遇到了二叉搜索树类的问题,在简单的情况下它工作得很好..但是对于重的搜索树来说它运行不正常 我的意思是,它通过将删除的一个设置为其他人来弄乱树。我认为问题出在删除方法

我的代码:

 public void delete(int data) {
        root = delete(root, data);
    }

private BSTnode delete(BSTnode t, int data) {
        BSTnode 2delete;
BSTnode  node2delete;
BSTnode  parent;
        int value;


    2delete = getNode(t, data);

    if (2delete == null) {
        return root;
    }

    parent = parent(t, 2delete);


    if (isLeaf(2delete)) {
        if (parent == null) {
            return null; 
        }
        if (data< parent.getdata()) {
            parent.setLeft(null);
        } 
        else {
            parent.setRight(null);
        }

        return t;
    }

    if (hasOnlyLeftChild(2delete)) {
        if (parent == null) {
            return 2delete.getLeft();
        }



        if (data < parent.getdata()) {
            parent.setLeft(parent.getLeft().getLeft());
        } 
        else {
            parent.setRight(parent.getRight().getLeft());
        }

        return t;
    }

    if (hasOnlyRightChild(2delete)) {
        if (parent == null) {
            return 2delete.getRight();
        }


        if (data < parent.getdata()) {
            parent.setLeft(parent.getLeft().getRight());
        } 
        else {
            parent.setRight(parent.getRight().getRight());
        }

        return t;
    }



    node2delete = minNode(2delete.getRight());
    value= node2delete.getdata();

    t = delete(t, value);


    2delete.setdata(value);

    return t;
}

0 个答案:

没有答案