资源简介
1, 利用平衡二叉树实现一个动态查找表,实现动态查找表的三种基本功能:查找,插入、删除和附加的两种功能:合并、分裂平衡二叉树。
2, 操作界面要给创建、查找、插入、删除、合并和分裂六种操作供选择。每种操作均要提示输入关键字。每次插入和删除一个节点后,应更新平衡二叉树的显示。该二叉树的显示采用凹入表形式。

代码片段和文件信息
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define LH +1 //左高
#define RH -1 //右高
#define EH 0 //等高
typedef struct ElemType{
int key;
}ElemType;
typedef struct BSTNode{
ElemType data;
int bf; //结点的平衡因子
struct BSTNode *lchild*rchild; //左右孩子指针
}BSTNode*BSTree;
void menu()
{printf(“ @@@@@@@@@@@@@@@@@@@@@@@平衡二叉树操作的演示@@@@@@@@@@@@@@@@@@@@@@\n“); //主界面函数
printf(“ @ @\n“);
printf(“ @ 1.创建树 @\n“);
printf(“ @ 2.查找元素 @\n“);
printf(“ @ 3.插入元素 @\n“);
printf(“ @ 4.删除元素 @\n“);
printf(“ @ 5.合并树 @\n“);
printf(“ @ 6.分裂树 @\n“);
printf(“ @ 0.退出 @\n“);
printf(“ @ @\n“);
printf(“ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n“);
printf(“\n请选择(0----6):“);
}
void DispTree(BSTree Tint iint j){ //树的打印输出
if(T->rchild)
DispTree(T->rchildi+4j);
for(j=1;j<=i;j++) printf(“ “);
printf(“%d“T->data.key);
printf(“(“); printf(“%d“T->bf); printf(“)“);
printf(“\n“);
if(T->lchild)
DispTree(T->lchildi+4j);
}
void R_Rotate(BSTree &p) {
// 对以*p为根的二叉排序树作右旋处理,处理之后p指向新的树根结点即旋转处理之前的左子树的根结点
BSTree lc;
lc = p->lchild; // lc指向*p的左子树根结点
p->lchild = lc->rchild; // lc的右子树挂接为*p的左子树
lc->rchild = p; p = lc; // p指向新的根结点
}
void L_Rotate(BSTree &p) {
// 对以p↑为根的二叉排序树作左旋处理,处理之后p指向新的树根结点即旋转处理之前的右子树的根结点
BSTree rc;
rc = p->rchild; // rc指向*p的右子树根结点
p->rchild = rc->lchild; // rc的左子树挂接为*p的右子树
rc->lchild = p; p = rc; // p指向新的根结点
}
void RightBalance(BSTree &T) {
// 对以指针T所指结点为根的二叉树作右平衡旋转处理, 本算法结束时,指针T指向新的根结点
BSTree 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 = LH; rc->bf = EH;break;
case EH: T->bf = rc->bf = EH;break;
case RH: T->bf = EH; rc->bf = RH;break;
}
ld->bf = EH;
R_Rotate(T->rchild);// 对*T的右子树作右旋平衡处理
L_Rotate(T); break; // 对*T作左旋平衡处理
case EH:
rc->bf=LH;
L_Rotate(T);
}
}
void LeftBalance(BSTree &T) {
// 对以指
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 50176 2010-05-27 21:23 课程设计(平衡二叉树)\Debug\vc60.idb
文件 61440 2010-05-10 15:41 课程设计(平衡二叉树)\Debug\vc60.pdb
文件 221247 2010-05-27 21:23 课程设计(平衡二叉树)\Debug\平衡二叉树.exe
文件 288384 2010-05-27 21:23 课程设计(平衡二叉树)\Debug\平衡二叉树.ilk
文件 25186 2010-05-27 21:23 课程设计(平衡二叉树)\Debug\平衡二叉树.obj
文件 280856 2010-05-09 23:32 课程设计(平衡二叉树)\Debug\平衡二叉树.pch
文件 607232 2010-05-10 15:41 课程设计(平衡二叉树)\Debug\平衡二叉树.pdb
文件 12204 2010-05-10 14:46 课程设计(平衡二叉树)\平衡二叉树.cpp
文件 3451 2010-05-27 21:23 课程设计(平衡二叉树)\平衡二叉树.dsp
文件 528 2010-05-27 21:26 课程设计(平衡二叉树)\平衡二叉树.dsw
文件 50176 2010-05-27 21:26 课程设计(平衡二叉树)\平衡二叉树.ncb
文件 48640 2010-05-27 21:26 课程设计(平衡二叉树)\平衡二叉树.opt
文件 766 2010-05-27 21:23 课程设计(平衡二叉树)\平衡二叉树.plg
文件 177664 2011-05-05 22:16 课程设计(平衡二叉树)\报告.doc
目录 0 2011-05-05 22:15 课程设计(平衡二叉树)\Debug
目录 0 2011-05-05 22:18 课程设计(平衡二叉树)
----------- --------- ---------- ----- ----
1827950 16
- 上一篇:ChartCtrl_doxygen
- 下一篇:局域网活动主机扫描程序
相关资源
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 利用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语言的课
- 算符优先语法分析器(C语言编写)
评论
共有 条评论