typedef enum { EH=0, LH=1, RH=-1 } bh_t; // 平衡因子
typedef int ElemType;
typedef struct BSTNode {
ElemType key;
int bf; // 平衡因子
struct BSTNode *lchild, *rchild, *parent;
} BSTNode, *BSTree;
searchAVL 非遞歸查找,返回是否存在並記錄父節點。
minNode/maxNode:獲取子樹最小/最大節點。preNode/nextNode:中序前驅/後繼(用於刪除時尋找替代節點)。四種不平衡情況對應兩大平衡函數:
leftbalance:LL(右單旋)+ LR(先左後右雙旋)。rightbalance:RR(左單旋)+ RL(先右後左雙旋)。旋轉中同步更新 parent 指針與 bf,區分插入/刪除場景調整平衡因子邏輯。
bf=EH 掛接。bf,遇到不平衡調用對應 balance 函數,調整完畢即返回。bf,不平衡時調用 balance 並結束。createAVL 循環插入構建;destroyAVL 後序遞歸釋放;提供中序/先序遍歷驗證。
int data[] = {1,5,7,4,3,2,11,9,10,100};
BSTNode* root = createAVL(data, 10);
InOrderTraverse(root); // 有序輸出
root = deleteNode(5, root);
... 連續刪除並打印驗證平衡性
parent 指針,便於向上回溯調整。