1、节点48的平衡因子为0 节点76的平衡因子为0 节点60的平衡因子为0 节点84的平衡因子为0二 概要设计为了实现以上操作,应以二叉链表为存储结构。1. 基本操作:node *create()创建二叉排序树void NRPreorder(node *bt)先序非递归遍历输出void NRinorder(node *bt)中序非递归遍历输出void NRpostorder(node *bt)后序非递归遍历输出int height(node *bt)计算左右子树深度void shendu(node *bt)计算平衡因子2. 本程序包含七个模块(1) 主程序模块(2) 二叉排序树创建模块(3) 先序
2、遍历模块(4) 中序遍历模块(5) 后序遍历模块(6) 计算左右子树深度模块(7) 计算平衡因子模块3. 模块调用图三 详细设计1 元素类型,结点类型和指针类型:#define maxsize 100typedef struct node char data; struct node *lc; struct node *rc;node;node *smaxsize;node *bt;node *q,*p;2.每个模块的分析:(1)主程序模块:int main() node *bt; bt=create(); printf(该二叉树的先序递归遍历序列为: ); preorder(bt);n该二叉
3、树的中序递归遍历序列为: inorder(bt);该二叉树的后序递归遍历序列为: postorder(bt);该二叉树的先序非递归遍历序列为: NRPreorder(bt);该二叉树的中序非递归遍历序列为: NRinorder(bt);该二叉树的后序非递归遍历序列为: NRpostorder(bt);以先序遍历输出该二叉树,每个节点的平衡因子如下: shendu(bt); getchar(); return 0;(2)二叉排序树创建模块: node *q,*p; bt=NULL; /*根节点指针置空*/ int x; int i; int m; int j;请输入数据个数: scanf(%d,
4、&m);请输入数据: for(j=0;jdata=x; q-lc=q-rc=NULL; if(bt=NULL) /*如果根节点指针为空,将其指向新申请节点*/ bt=q; else p=bt; /*活动指针指向根节点*/ while(i=0) if(p-datax) /*如果新输入的数值比当前节点的数值小*/ if(p-lc!=NULL) /*如果当前节点的左孩子不为空,将活动指针移到它的左孩子*/ p=p-lc; else /*否则将新申请节点链到当前节点的左孩子,将i标记为1,表示已处理*/ p-lc=q; i=1; else /*否则沿右链域比较*/rc!=NULL) rc; else
5、/*直到终端,插入输入节点*/rc=q; return bt;(3)先序遍历模块: node *p; top=-1; top+; stop=bt; while(top!=-1) p=stop-; while(p)%d ,p-data); stop=p- p=p-(4)中序遍历模块 int top; if(bt=NULL) return; top=0; p=bt; while(!(p=NULL&top=0) while(p!=NULL) stop=p; top+; p=p- if(top q=NULL; flag=1; while(top!=-1&flag) p=stop;rc=q) print
6、f( top-; q=p; else p=p- flag=0; while (top!=-1);(6)计算左右子树深度模块 int hl,hr; if(bt=NULL) /*利用递归算法求左右子树的深度*/ return 0; else hl=height(bt-lc); hr=height(bt-rc); if(hlhr) return (hl+1); else return (hr+1);(7)计算平衡因子模块 int sl,sr; int ph; sl=height(p- /*当前节点左子树的深度*/ sr=height(p- /*当前节点右子树的深度*/ ph=sl-sr; /*当前节
7、点的平衡因子*/节点为%d的平衡因子为%dndata,ph);3.函数调用图:4. 完整的程序:(见源文件).四 使用说明、测试分析及结果1程序使用说明(1)本程序的运行环境为VC6.0。(2)进入演示程序后即显示提示信息:请输入数据个数:请输入数据:输入完数据以三种形式输出二叉排序树,并输出每个节点的平衡因子.2.测试数据:3.运行界面:五、实验总结本次试验过程比较顺利,由于上次的二叉树积累了经验,所以这次编得比较快,编程过程中没有出现问题,通过这次编程对于二叉树有了更进一步的熟悉和了解,可以熟练编写二叉排序树,熟悉了二叉排序树的结构,并且对于计算节点的深度以及节点的平衡因子有了一定的掌握。教师评语:实验成绩:#includemalloc.h/定义结构体/定义栈int top=-1;/创建二叉排序树/先序递归遍历void preorder(node *bt) if(bt! printf(,bt- preorder(bt-/中序递归遍历void inorder(node *bt) inorder(bt-/后序递归遍历void postorder(node *bt) postorder(bt-/先序非递归遍历/中序非递归遍历/后序非递归遍历/计算平衡因子
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1