繁体   English   中英

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

[英]Placing Nodes into a Binary Heap in Java

到目前为止,我为每个节点提供一个ID,该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

可悲的是,没有办法遍历整个链表来找到一个节点。 这就是链接列表,链接列表的原因! 指向唯一节点的唯一指针是根指针或列表中的上一个节点。 如果向每个节点添加previousNode指针,则可以向后和向前遍历链接列表,但这可能对您的情况没有帮助。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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