| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1588 人关注过本帖
标题:高度平衡二叉树的插入算法
只看楼主 加入收藏
ringer1314
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2005-10-25
收藏
 问题点数:0 回复次数:1 
高度平衡二叉树的插入算法

Status InsertAVL (BSTree &T,ElemType s)
{ if (T==NULL) T=s;
else {
f=NULL; //记录a的双亲
a=T; //记录在查找中平衡因子不为零的结点
p=T; //进行比较的结点
q=NULL; //记录p的双亲
While (p!=NULL) //查找结点
{ if (p->bf!=0) { a=p; f=q;}
q=p;
if (s->data<p->data) p=p->Lchild;
else p=p->Rchild;
}

if (s->data<q->data) q->Lchild=s;
else q->Rchild=s; //将s插入
//修改a至s路径上结点的平衡因子
if (s->data<a->data)
{ p=a->Lchild; b=p; d=1;}
else { p=a->Rchild; b=p; d=-1;} //这段中,d应该也是平衡因子,但不明白为什么要用两个平衡因子bf和d;还有b是什么东东??? 老师的变量名称让人费解。。。有高手来解释下吗?关于高度平衡二叉树的插入算法。。。
while (p!=s)
if (s->data<p->data)
{ p->bf=1; p=p->Lchild; }
else {p->bf=-1; p=p->Rchild;}
if (a->bf==0) a->bf=d;
else if (a->bf+d==0) a->bf=0;
else {if (d==1)
if (b->bf==1) LL 旋转
else LR旋转
else if (b->bf==-1) RR旋转
else RL旋转
//修改a的双亲
case
f=NULL: T=b;
f->Lchild=a: f->Lchild=b;
f->Rchild=a: f->Rchild=b;
end of case
}
}

有高手来解释一下这段算法吗?从老师的课件中拿过来的,
搜索更多相关主题的帖子: 二叉树 算法 高度 
2005-12-12 03:05
ringer1314
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2005-10-25
收藏
得分:0 

哦 终于看明白了。。。d只是一个作为一个参变量 并不是平衡因子,但由它的值来判断插入元素后是否破坏平衡了 并判断应该作那种旋转

2005-12-12 04:20
快速回复:高度平衡二叉树的插入算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017085 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved