平衡二叉排序树实验报告

更新时间:2023-06-30 14:59:14 阅读: 评论:0

华南农业大学信息学院
        综合性、设计性实验
                                        起止日期:2012冬
在故乡早睡早起的好处
学院
信息学院
专业班级
软件工程2班
学号
201130690225
姓名
许炯勃
实现平衡二叉排序树的各种算法
项                    目
算法设计
独立完成情况
算法熟练程度
测试通过
成功
失败
独立
帮助
掌握
了解
不懂
蜀南竹海风景区插入新结点
吃猪肉√
前序、中序、后序遍历二叉树(递归)
路由器和交换机的区别
前序、中序、后序遍历的非递归算法
妒忌是什么意思
层次遍历二叉树
在二叉树中查找给定关键字
交换各结点的左右子树
求二叉树的深度
叶子结点数
南充旅游景点排行
删除某结点
A---------完成实验要求的全部功能并运行通过,算法有一定的新意,程序代码符合书写规范,实验报告叙述清晰完整,有详尽的分析和总结。
B---------完成实验要求的全部功能,程序代码符合书写规范,实验报告叙述    清晰完整。
C---------完成实验要求的大部分功能,实验报告良好。
D---------未按时完成实验,或者抄袭。
成绩
                                    教师签名:杨秋妹
一,实验所用的数据类型:
(1)二叉树,其结构如下
typedef struct BSTNode{
  ElemType data;          /*树的值*/
  int bf;                /*平衡因子*/
  struct BSTNode *lchild,*rchild;
} BSTNode,*BSTree;
(2)非递归遍历和层次遍历时用到的栈和队列为C++STL里的自带栈和队列,即
stack<BSTNode *> s;queue<BSTNode *> q;
其操作包括:s.push(SElemType e)//入栈
            s.pop()//出栈
            s.empty()//判断栈是否为空,是空时返回TRUE
            s.top()//返回栈顶元素
            q.push(SElemType e)//入队列
            q.pop()//出队列
            q.empty()//判断队列是否为空,是空时返回TRUE
            q.front()//返回队头元素
二,实验所用到的函数及其作用:
(1)SearchBT(BSTree T,ElemType key) /*在二叉树中查找给定关键字(函数返回值为成功TRUE,失败FALSE)*/
(2) InrtAVL(BSTree &T,ElemType e,bool &taller) /*插入结点,并使所成树为平衡二叉排
序树,e为插入结点的值,taller为判断插入结点后树是否长高的布尔型变量*/
(3)R_Rotate(BSTree &p)  //将树向右旋转
(4)L_Rotate(BSTree &p)  //将树向左旋转
(5) Left_Balance(BSTree &T)  //插入结点时向左平衡
(6) Right_Balance(BSTree &T)  //插入结点时向右平衡
阅读世界(7) PreOrderTraver(BSTree T,Status(*Visit)(ElemType))  /*递归先序遍历平衡二叉排序树*/
(8) PreOrder(BSTree T,Status(*Visit)(ElemType))    /*非递归先序遍历平衡二叉排序树*/
(9) InOrderTraver(BSTree T,Status(*Visit)(ElemType))  /*递归中序遍历平衡二叉排序树*/
(10) InOrder(BSTree T,Status(*Visit)(ElemType))        /*非递归中序遍历平衡二叉排序树*/
(11) PostOrderTraver(BSTree T,Status(*Visit)(ElemType))  /*递归后序遍历平衡二叉排序树*/
(12) PostOrder(BSTree T,Status(*Visit)(ElemType))        /*非递归后序遍历平衡二叉排序树*/
(13) LevelTraver(BSTree T,Status(*Visit)(ElemType))    /*层次遍历平衡二叉排序树*/
(14) ExchangeNode(BSTree &T)    //交换各节点的左右子树
(15) int TreeDepth(BSTree T)  //返回树的深度
(16) int LeafCount(BSTree T)    //计算树的叶子节点数并返回
(17) CreateBT(BSTree  &T)      //创建一颗平衡二叉排序树
(18) DeleteAVL(BSTree &p,ElemType e,bool &shorter) /*平衡二叉排序树的删除,e为删除的结点的值,shorter为判断删除结点后树高度是否减小的布尔型变量*/
(19) Delete(BSTree q,BSTree &r,bool &shorter)  //结点的删除
(20) Left_Balance_del(BSTree &p,bool &shorter) //删除结点是向左平衡
(21) Right_Balance_del(BSTree&p,bool &shorter) //删除结点时向右平衡
三,算法设计及其实现
(1)结点的插入:在插入结点时,先判断树高度是否改变,再判断是否有结点的平衡因子的绝对值大于1,如果有,则根据情况(分为四种情况:LL型,LR型,RR型,RL型)进行左旋或右旋,使新生成的树也是一颗平衡二叉排序树,代码如下:
Status InrtAVL(BSTree &T,ElemType e,bool &taller){ /*插入结点,并使所成树为平衡二叉排序树*/

本文发布于:2023-06-30 14:59:14,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1070383.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:结点   遍历   实验   排序
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图