二叉树在创建过程中会遇到4中情况需要调整转换为二叉平衡树
对图1来说需要进行一次旋转,下面说明代码实现的方式
转换结果
开始
交换q指针和p指针的data值
右旋代码
q->left = p->left;
p->left = p->right;
p->right = q->right;
q->right = p;
分别为下面4个变换步骤
左旋只需要改变其中的left和right即可
对下图来说需要两次旋转
第一次旋转,进行左旋
带入上述左旋中进行旋转,得到左图下面结果,在带入右旋中即可得到最终结果
下面给出完整旋转代码
while (1)
{
lstatus = 0;
rstatus = 0;
if (p->weight < -1)
{
q = p;
lstatus = 1;
p = p->right;
}
if (p->weight > 1)
{
q = p;
rstatus = 1;
p = p->left;
}
if (!lstatus && !rstatus)
break;
}
找到p,q
void turn_left(Node *&p, Node *&q)
{
Node *r;
int temp;
temp = q->data;
q->data = p->data;
p->data = temp;
q->right = p->right;
p->right = p->left;
p->left = q->left;
q->left = p;
q->weight = 0;
if (p->right && p->left)
p->weight = 0;
if (!p->right && !p->left)
p->weight = 0;
if (p->right && !p->left)
p->weight = -1;
if (!p->right && p->left)
p->weight = 1;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。