这里只给出一个简单的实现,具体原理参见Google、Baidu的各个角落及各大教材。做两点说明:
仅仅实现了必要的左旋、右旋处理,左平衡、右平衡操作,以及数据的插入操作,
不可重复插入数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | typedef int Type; //~ 节点数据类型 typedef struct Node { Type data; int bf; Node *left, *right; Node(){ bf = 0; left = right = 0; } } AVLNode, *AVLTree; //~ 平衡树及其节点 void RRotate(AVLTree & T) //~ 右旋处理,T的左孩子成为新子树根 { AVLNode * tmp = T->left; T->left = tmp->right; tmp->right = T; T = tmp; } |

