簡體   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