[英]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.