在Java中插入堆

时间:2014-01-31 09:07:21

标签: java data-structures heap

这是java中没有使用数组的Heap的实现但是我在插入数据时有一些问题,例如当我插入1,3,2,5,8时它插入5,8两次作为子树3和另一个作为2的子树。

public class Heap {
private class Node {
    private Node left, right,parent;
    private int key;
    private Node(int key) {
        this.key = key;
    }
}

private Node root;

public void insert(int key) {
     root = insert(root,key,null);
}

private Node insert(Node x, int key,Node parent) {
    if(x == null){
        x = new Node(key);
        x.parent = parent;
        return x;
    }if(x.left == null){
        x.left = insert(x.left, key,x);
    }else if (x.right == null) {
        x.right = insert(x.right, key,x);
    }else{
        x.left = insert(x.left, key,x);
        x.right = insert(x.right, key,x);
    }
    return x;
}

}

2 个答案:

答案 0 :(得分:0)

问题是

x.left = insert(x.left, key,x);
x.right = insert(x.right, key,x);

你只是插入两个子堆......

这不是堆的工作方式......

答案 1 :(得分:0)

else {
    x.left = insert(x.left, key, x);
    x.right = insert(x.right, key, x);
}

将密钥插入x的两个子树中。

你必须决定采取哪个分支,例如通过比较密钥到x的密钥,并使用右分支key >= x.key,否则采用左分支(如果正确完成,你将得到一个有序的树),或采取最小的分支 - x的树。