在前面分享完顺序表和二叉排序树的相关操作后,我们继续来看看平衡二叉树(AVL树)的相关操作吧
1.平衡二叉树的定义:
2.平衡因子:
如图的二叉树就是平衡二叉树啦
下面来看看平衡二叉树的节点结构:
typedef struct Node
{
int key;
struct Node *left;
struct Node *right;
int height;
}BTNode;
3.平衡调整的四种类型:
4.调整的四种类型:
(1)LL型:
代码实现:
BTNode *ll_rotate(BTNode *y)
{
BTNode *x = y->left;
y->left = x->right;
x->right = y;
y->height = max(height(y->left), height(y->right)) + 1;
x->height = max(height(x->left), height(x->right)) + 1;
return x;
}
(2)RR型:
BTNode *rr_rotate(struct Node *y)
{
BTNode *x = y->right;
y->right = x->left;
x->left = y;
y->height = max(height(y->left), height(y->right)) + 1;
x->height = max(height(x->left), height(x->right)) + 1;
return x;
}
(3)LR型:
BTNode* lr_rotate(BTNode* y)
{
BTNode* x = y->left;
y->left = rr_rotate(x);
return ll_rotate(y);
}
(4)RL型:
Node* rl_rotate(Node* y)
{
Node * x = y->right;
y->right = ll_rotate(x);
return rr_rotate(y);
}
好啦,关于平衡二叉树的内容就分享到这啦。
本贴为博主亲手整理。如有错误,请评论区指出,一起进步。谢谢大家的浏览.