资源简介
本代码用c语言实现了平衡二叉树这一数据结构,同时实现了基本查找,插入,删除操作,都是自己精心设计的算法,花了很多功夫。。

代码片段和文件信息
#include“iostream.h“
#include“BBstree.h“
#include“stdlib.h“
BBstree Search(BBstree &TKeytype key)
{ //在平衡二叉排序树中查找与key值相同的关键字,若存在则函数返回相应的不为空的指针,
//否则返回空指针
if(!T||(key==T->key))
return T;
else if(keykey)
return Search(T->lchildkey); //递归在左子树中进行查找
else
return Search(T->rchildkey); //递归在右子树中进行查找
}
void L_Rotate(BBstree &p)
{ //对以*p为根的二叉排序树作左旋处理,处理之后p指向新的树根结点,及旋转处理之前的树的右子树的根结点
BBstree rc=p->rchild; //rc指向*p的右子树的根结点
p->rchild=rc->lchild; //rc的左子树挂接为*p的右子树
rc->lchild=p; //p挂接在rc的左子树上
p=rc; //p指向新的根结点
}
void R_Rotate(BBstree &p)
{ //对以*p为根的二叉排序树作右旋处理,处理之后p指向新的树根结点,及旋转处理之前的树的左子树的根结点
BBstree lc=p->lchild; //rc指向*p的左子树的根结点
p->lchild=lc->rchild; //rc的右子树挂接为*p的左子树
lc->rchild=p; //p挂接在rc的右子树上
p=lc; //p指向新的根结点
}
void LeftBalance(BBstree &T)
{ //对以指针T所指结点为根的二叉树作左平衡旋转处理,算法结束时,指针T指向新的根结点
BBstree lcrd;
lc=T->lchild; //lc指向*T的左子树根结点
switch(lc->bf) //检查*T的左子树的平衡度,并做相应平衡处理
{
case LH:{ //新结点插入在*T的左子树的左子树上,要作相应单右旋处理
T->bf=lc->bf=EH;
R_Rotate(T);
break;
}
case RH:{ //新结点插入在*T的左子树的右子树上,要作双旋处理
rd=lc->rchild; //rd指向*T的左孩子的右子树根
switch(rd->bf) //修改*T及其左孩子的平衡因子
{
case LH:{
T->bf=RH;
lc->bf=EH;
break;
}
case EH:{
T->bf=lc->bf=EH;
break;
}
case RH:{
T->bf=EH;
lc->bf=LH;
break;
}
}
rd->bf=EH;
L_Rotate(T->lchild); //对*T的左子树作左旋平衡处理
R_Rotate(T); //对*T作右旋平衡处理
}
}
}
void LeftBalance1(BBstree &Tbool &taller)
{//原本T所指结点的平衡因子为1删除T的右孩子后作左平衡旋转处理,算法结束时,指针T指向新的根结点
BBstree lcrd;
lc=T->lchild; //lc指向*T的左子树根结点
switch(lc->bf) //检查*T的左子树的平衡度,并做相应平衡处理
{
case LH:{ //T的左孩子平衡因子为1相应的对T作右旋处理使T保持平衡
T->bf=lc->bf=EH;
R_Rotate(T);
taller=true;//对T而言树变矮
break;
}
case EH:{ //T的左孩子平衡因子为0相应的对T作右旋处理使T保持平衡
T->bf=LH;
lc->bf=RH;
R_Rotate(T);
taller=false;//对T而言树没变矮
break;
}
case RH:{ //T的左孩子平衡因子为-1相应的对T作右旋处理使T保持平衡
rd=lc->rchild; //rd指向*T的左孩子的右子树根
switch(rd->bf) //修改*T及其左孩子的平衡因子
{
case LH:{//T平衡因子变为-1T的左孩子变为0
T->bf=RH;
lc->bf=EH;
break;
}
case EH:{//T平衡因子变为0T的左孩子变为0
T->bf=lc->bf=EH;
break;
}
case RH:{//T平衡因子变为0T的左孩子变为1
T->bf=EH;
lc->bf=LH;
break;
}
}
rd->bf=EH;
L_Rotate(T->lchild); //对*T的左子树作左旋平衡处理
R_Rotate(T);//对*T作右旋平衡处理
taller=true;//对T而言树变矮
}
}
}
void RightBalance(BBstree &T)
{ //对以指针T所指结点为根的二叉树作右平衡旋转处理,算法结束时,指针T指向新的根结点
BBstree rcld;
rc=T->rchild; //rc指向*T的右子树根结点
switch(rc->bf) //检查*T的右子树的平衡度,并做相应平衡处理
{
case RH:{ //新结点插入在*T的右子树的右子树上,要作相应单左旋处理
T->bf=rc->bf=EH;
L_Rotate(T);
break;
}
case LH:{ //新结点插入在*T的右子树的左子树上,要作双旋处理
ld=rc->lchild; //ld指向*T的右孩子的左子树根
switch(ld->bf) //修改*T及其右孩子的平衡因子
{
case LH:{
T->bf=EH;
rc->bf=RH;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4428 2008-12-18 22:22 BBstree\BBstree.dsp
文件 522 2008-12-16 22:20 BBstree\BBstree.dsw
文件 1537 2008-12-29 18:04 BBstree\BBstree.h
文件 66560 2010-10-26 17:58 BBstree\BBstree.ncb
文件 48640 2010-10-26 17:58 BBstree\BBstree.opt
文件 927 2010-03-13 23:16 BBstree\BBstree.plg
文件 12002 2008-12-29 20:32 BBstree\BBstree_hanshu.cpp
文件 1496 2009-01-04 17:32 BBstree\BBstree_main.cpp
文件 217174 2010-03-13 23:16 BBstree\Debug\BBstree.exe
文件 252360 2010-03-13 23:16 BBstree\Debug\BBstree.ilk
文件 43520 2008-12-28 15:49 BBstree\Debug\BBstree.opt
文件 256300 2010-03-13 23:16 BBstree\Debug\BBstree.pch
文件 549888 2010-03-13 23:16 BBstree\Debug\BBstree.pdb
文件 18407 2009-01-04 17:32 BBstree\Debug\BBstree_hanshu.obj
文件 10701 2010-03-13 23:16 BBstree\Debug\BBstree_main.obj
文件 74752 2010-03-13 23:16 BBstree\Debug\vc60.idb
文件 61440 2010-03-13 23:16 BBstree\Debug\vc60.pdb
目录 0 2011-10-15 00:53 BBstree\Debug
目录 0 2011-10-15 00:53 BBstree
----------- --------- ---------- ----- ----
1620654 19
- 上一篇:C++点菜管理系统
- 下一篇:《数据结构(c++描述)》教材习题解答.zip
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论