在Java中将节点放入二进制堆中

时间:2017-12-02 02:26:30

标签: java linked-list nodes

截至目前,我给每个节点一个id,用于比较,直到找到具有匹配id的节点。我需要一种方法来提高效率,而不必递归搜索所有节点。

我想知道是否有一些数学技巧可以找到正确的节点并让它指向它而不必遍历所有节点以找到正确的节点。

    public void insert(int info){
    Node temp = new Node(info, N+1);
    if (this.isEmpty()) { // First item is always the root.
      this.root = temp;
    }
    else{
      balance(temp, root); 
    }
    N++;
  }

public void balance(Node key, Node target){ 
if (key.id == 2*target.id || (key.id == (2*target.id + 1))){
  if (key.id == 2*target.id){
    target.leftChild = key;
    key.parent = target;
    last = key;
  }

  else {
    target.rightChild = key;
    key.parent = target;
    last = key;
  }

  if (key.info < target.info) {
    swim(key);
    return;
  }
}

https://pastebin.com/kKhL9ZNh

1 个答案:

答案 0 :(得分:0)

可悲的是,无法遍历整个链表来查找节点。这就是链接列表链接列表的原因!指向唯一节点的唯一指针是根指针,或列表中的上一个节点。如果您将previousNode指针添加到每个节点,您可以向后和向前遍历链接列表,但这可能不会帮助您解决问题。

你现在可能想到的最后一件事是&#34;好吧,如果每个节点都有一个指向每个其他节点的指针呢?&#34;而且,这将是完整图形ADT的一种形式,而不是链接列表ADT。如果找到特定节点是您的主要目标,那么我建议使用数组(或ArrayList)或哈希表,而不是链接列表。