簡體   English   中英

計算avl樹中節點的平衡因子

[英]Calculating the balance factor of a node in avl tree

我想在不使用任何遞歸過程的情況下計算avl樹中節點的平衡因子。 我怎樣才能做到這一點? 請告訴我方法或提供C ++代碼段。

您可以將平衡因子保存為每個節點保存的信息的一部分。 具體來說,您可以保存左右子樹的高度,並在插入/刪除路徑上的每個插入/刪除操作中更新值。

例:

class Node {
  public:
    // stuff...
    int GetBF() { return lHeight - rHeight; }
  private:
    int data;
    Node* right;
    Node* left;
    Node* parent; // optional...
    int rHeight;  // Height of the right subtree
    int lHeight;  // Height of the left subtree
};

如果沒有遞歸,可能會有些復雜,但是您可以在每個節點中節省節點高度。 然后您可以在恆定時間內獲得平衡因子(左右孩子的身高之差,如果child為NULL則height為0)。

更新此號碼將很復雜。 插入節點時,您必須更新路徑上的所有高度,但不必更新所有高度。 高度始終等於max(左子高度,右子高度)+1。此插入是遞歸的,我不知道這是否對您有問題。 同樣,在平衡過程中,您還必須更新高度,並可能再次使用遞歸。

希望對您有幫助。 如果不是,請指定遞歸問題-時間,內存等,我們可以嘗試找到更好的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM