唯一的确定一棵二叉树(共12页).doc
《唯一的确定一棵二叉树(共12页).doc》由会员分享,可在线阅读,更多相关《唯一的确定一棵二叉树(共12页).doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数据结构课程设计唯一的确定一棵二叉树 n 指导教师:n 设计人: n 班级: n 学号: 设计时间:2011年4月18实习二 树、图及其应用题目:唯一的确定一棵二叉树实习时间:2011.4.15一、需求分析:1. 如果给出了遍历二叉树的前序序列和中序序列,则可以构造出唯一的一棵二叉树。试编写实现上述功能的程序。已知一棵二叉树的前序和中序序列,设计完成下列任务的一个算法:(1)构造一棵二叉树;(2)证明构造正确(即分别以前序和中序遍历该树,将得到的结果与给出的序列进行比较)。2.测试数据:前序序列为ABDEGCFHIJ,中序序列为DBGEAHFIJC。二、设计:n 设计
2、思想(1)存储结构:二叉树 ,用两个一维数组A和B分别存放前序和中序序列。(2)主要算法基本思想:将前序和中序序列分别读入数组A和B。根据定义,前序序列中第一个元素一定是树根,在中序序列中该元素之前的所有元素一定在左子树中,其余元素则在右子树中。所以,首先从数组A中取出第一个元素A0作根结点,然后在数组B中找到A0,以它为界,在其前面的是左子树中序序列,在其后面的是右子树中序序列。若左子树不为空,沿前序序列向后移动,找到左子树根结点,转。左子树构造完毕后,若右子树不为空,沿前序序列向后移动,找到右子树根结点,转。前序序列中各元素取完则二叉树构造完毕。对二叉树进行前序和中序遍历,并将结果分别与数
3、组A和B进行比较,若相同,则证明二叉树构造正确。n 设计表示(1)函数调用关系图:main Initiate CreateTreePrintBiTreePreOrder VisitInOrder VisitPostOrder(2)函数接口规格说明:void Initiate(BiTNode *root)/初始化二叉树的头结点void Visit(char item)/访问操作void PreOrder(BiTNode *T,void Visit(char item)/前序遍历二叉树void InOrder(BiTNode *T,void Visit(char item)/中序遍历二叉树void
4、 PostOrder(BiTNode *T,void Visit(char item)/后序遍历二叉树void PrintBiTree(BiTNode *T,int n)/显示二叉树void CreateTree(BiTNode *T,int pre_f,int pre_l,int in_f,int in_l,char pre,char in)/按要求创建二叉树n 实现注释 (1)根据前序遍历和后序遍历创建二叉树,并后序遍历该二叉树。(2)二叉树逆转90度来显示。n 详细设计 总体来说,本程序设计相对比较简单,主要包括七个功能模块:初始化函数、前序遍历二叉树函数、中序遍历二叉树函数、后序遍历二
5、叉树函数、显示函数、创建二叉树函数、 主函数。下面分别给予介绍: 初始化函数void Initiate(BiTNode *root)*root=(BiTNode *)malloc(sizeof(BiTNode);(*root)-LeftChild=NULL;(*root)-RightChild=NULL; 前序遍历二叉树函数void PreOrder(BiTNode *T,void Visit(char item)if(T!=NULL) Visit(T-data); PreOrder(T-LeftChild,Visit); PreOrder(T-RightChild,Visit); 中序遍历二
6、叉树函数void InOrder(BiTNode *T,void Visit(char item)if(T!=NULL) InOrder(T-LeftChild,Visit); Visit(T-data); InOrder(T-RightChild,Visit); 后序遍历二叉树函数void PostOrder(BiTNode *T,void Visit(char item)if(T!=NULL) PostOrder(T-LeftChild,Visit); PostOrder(T-RightChild,Visit); Visit(T-data); 显示函数void PrintBiTree(Bi
7、TNode *T,int n)int i;if(T=NULL) return;PrintBiTree(T-RightChild,n+1);for(i=0;i=0) printf(_); printf(%cnn,T-data);PrintBiTree(T-LeftChild,n+1); 创建二叉树函数void CreateTree(BiTNode *T,int pre_f,int pre_l,int in_f,int in_l,char pre,char in)int interval=0;/int same=in_f;if(prepre_f!=insame) while(prepre_f!=i
8、nsame)/在中序序列中找到根节点 same+; interval+; if(interval=0)&(pre_f=pre_l) /找到了叶节点,也是递归出口 T-data=prepre_f; T-LeftChild=NULL; T-RightChild=NULL;if(interval!=0)&(intervalLeftChild=(BiTNode *)malloc(sizeof(BiTNode); T-RightChild=(BiTNode *)malloc(sizeof(BiTNode); T-data=prepre_f; CreateTree(T-LeftChild,pre_f+1,
9、pre_f+interval,in_f,in_f+interval-1,pre,in); CreateTree(T-RightChild,pre_f+interval+1,pre_l,in_f+interval+1,in_l,pre,in);if(interval!=0)&(interval=pre_l-pre_f)/只有左子树 T-LeftChild=(BiTNode *)malloc(sizeof(BiTNode); T-data=prepre_f; CreateTree(T-LeftChild,pre_f+1,pre_l,in_f,in_f+interval-1,pre,in); T-R
10、ightChild=NULL;if(interval=0)&(pre_f!=pre_l)/只有右子树 T-RightChild=(BiTNode *)malloc(sizeof(BiTNode); T-data=prepre_f; T-LeftChild=NULL; CreateTree(T-RightChild,pre_f+interval+1,pre_l,in_f+interval+1,in_l,pre,in); 主函数void main()BiTNode *T;int Pre_len,In_len;char PreMaxSize;/前序序列char InMaxSize;/中序序列prin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 唯一 的确 定一棵 二叉 12
限制150内