版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验四二叉树操作实现实验四二叉树操作实现实验四二叉树操作实现实验四二叉树操作实现编制仅供参考审核批准生效日期地址:电话:传真:邮编:实验四二叉树操作实现实验日期:2017年4月20日实验目的及要求1.熟练掌握树的基本概念、二叉树的基本操作及在链式存储结构上的实现;2.重点掌握二叉树的创建、遍历及求深度等算法;3.掌握运用递归方式描述算法及编写递归C程序的方法,提高算法分析和程序设计能力。实验内容键盘输入一个字符串,利用二叉树前序遍历的结果建成一棵二叉树,并用三种遍历方法打印,比较是否与自己预先想象的相一致。再求树的深度、1度结点数、2度节点数,交换二叉树的左右子树并输出交换后的中序遍历结果验证交换的正确性。找到二叉树中序遍历最后一个结点并输出结点值。二叉树结点类型定义:typedefchardatatype;typedefstructtnode{datatypedata;structtnode*lchild,*rchild;}BiTNode,*BiTree;任务1.题目要求创建一个程序文件,自定义相应函数完成以下操作:(1)voidvisit(BiTreep)/*输出p指针指向的结点*/(2)voidPreorder(BiTreeT)/*前序遍历*/(3)voidInorder(BiTreeT)/*中序遍历*/(4)voidPostorder(BiTreeT)/*后序遍历*/(5)BiTreeCreateTree()/*以前序遍历的顺序建立二叉树*/(6)intdeep(BiTreeT)/*求二叉树深度*/(7)intleaf(BiTreeT)/*求叶子结点数*/(8)intOneChild(BiTreeT)/*求1度结点数*/(9)intTwoChild(BiTreeT)/*求2度结点数*/(10)voidExchange(BiTreeT)/*二叉树左右子树交换*/(11)BiTreeInorderLastNode(BiTreeT);/*找二叉树中序遍历最后一个结点*/2.请回答下列问题(1)在n个结点二叉树的二叉链表存储中,其指针域的总数为2n个,其中n-1个用于链接孩子结点,n+1个空闲着。(2)在二叉链表存储中,数据域值为data,左右子树的指针分别为left和right,则判断:指针p所指结点为0度结点的条件是p->left==NULL&&p->right==NULL;指针p所指结点为1度结点的条件是(p->left==NULL&&p->right!=NULL)||(p->left!=NULL&&p->right==NULL);指针p所指结点为2度结点的条件是p->left!=NULL&&p->right!=NULL。(3)T为二叉树的根的地址,该树是空二叉树满足条件:T==NULL。3.源程序清单(含必要的注释)#include<>#include<>typedefchardatatype;typedefstructtnode{ datatypedata; structtnode*lchild,*rchild;}BiTNode,*BiTree;voidvisit(BiTreep);/*输出p指针指向的结点*/voidPreorder(BiTreeT);/*前序遍历*/voidInorder(BiTreeT);/*中序遍历*/voidPostorder(BiTreeT);/*后序遍历*/BiTreeCreateTree();/*以前序遍历的顺序建立二叉树*/intdeep(BiTreeT);/*求二叉树深度*/intleaf(BiTreeT);/*求叶子结点数*/intOneChild(BiTreeT);/*求1度结点数*/intTwoChild(BiTreeT);/*求2度结点数*/voidExchange(BiTreeT);/*二叉树左右子树交换*/BiTreeInorderLastNode(BiTreeT);/*找二叉树中序遍历最后一个结点*/voidvisit(BiTreep){/*输出p指针指向的结点*/ if(p->data!='#'){ printf("%c",p->data); }}voidPreorder(BiTreeT){/*前序遍历*/ if(T!=NULL){ visit(T);//访问根节点 Preorder(T->lchild);//访问左子节点 Preorder(T->rchild);//访问右子节点 }}voidInorder(BiTreeT){/*中序遍历*/ if(T!=NULL){ Inorder(T->lchild);//访问左子节点 visit(T);//访问根节点 Inorder(T->rchild);//访问右子节点 }}voidPostorder(BiTreeT){/*后序遍历*/ if(T!=NULL){ Postorder(T->lchild);//访问左子节点 Postorder(T->rchild);//访问右子节点 visit(T);//访问根节点 }}BiTreeCreateTree(){/*以前序遍历的顺序建立二叉树*/ charch; BiTreeT; if((ch=getchar())=='#'){/*#表示空树*/ returnNULL; } else{ T=(BiTree)malloc(sizeof(BiTNode));//生成根节点 T->data=ch; T->lchild=CreateTree();//构造左子树 T->rchild=CreateTree();//构造右子树 returnT; }}intdeep(BiTreeT){/*求二叉树深度*/ intlh,rh; if(T==NULL){ return0; } else{ lh=deep(T->lchild); rh=deep(T->rchild); } return(lh>rhlh:rh)+1;}intleaf(BiTreeT){/*求叶子结点数*/ intm,n; if(!T){/*空树没有叶子*/ return0; } elseif(!T->lchild&&!T->rchild){/*叶子结点*/ return1; } else{/*左子树的结点数加上右子树的结点数*/ m=leaf(T->lchild); n=leaf(T->rchild); returnm+n; }}intOneChild(BiTreeT){/*求1度结点数*/ intn=0; if(T==NULL){ return0; } elseif((T->lchild==NULL&&T->rchild!=NULL)||(T->lchild!=NULL&&T->rchild==NULL)){ n=1; } returnOneChild(T->lchild)+OneChild(T->rchild)+n;}intTwoChild(BiTreeT){/*求2度结点数*/ intn=0; if(T==NULL){ return0; } elseif((T->lchild!=NULL&&T->rchild!=NULL)) { n=1; } returnTwoChild(T->lchild)+TwoChild(T->rchild)+n;}voidExchange(BiTreeT){/*二叉树左右子树交换*/ BiTreetemp; if(T){ temp=T->lchild; T->lchild=T->rchild; T->rchild=temp; Exchange(T->lchild); Exchange(T->rchild); }}BiTreeInorderLastNode(BiTreeT){/*找二叉树中序遍历最后一个结点*/ if(T) while(T->rchild) { T=T->rchild; } returnT;}intmain(){ BiTreeT; printf("以前序遍历的二叉树:"); T=CreateTree(); printf("\n先序遍历:"); Preorder(T); printf("\n"); printf("\n中序遍历:"); Inorder(T); printf("\n"); printf("\n后序遍历:"); Postorder(T); printf("\n"); printf("\n树的深度=%d\n",deep(T)); printf("叶子结点数=%d\n",leaf(T)); printf("1度结点数=%d\n",OneChild(T)); printf("2度结点数=%d\n",TwoChild(T)); printf("\n二叉树中序遍历最后一个结点为:%c",InorderLastNode(T)->data); printf("\n"); printf("\n交换后的二叉树先序遍历为:"); Exchange(T);Preorder(T); printf("\n交换后的二叉树中序遍历为:"); Inorder(T); printf("\n交换后的二叉树后序遍历为:");
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临床理论考试试题及答案2026版
- 临时食材供货应急预案方案
- 行政管理公司员工管理规章制度
- 塔吊监控系统施工方案模板
- 消防安全管理单位检修员定期维护安全操作规程
- 学生食堂停水停电停气应急预案
- 中医内科学模拟试卷及答案
- 2026校园物业面试题及答案
- 2026学社联面试题目及答案
- 2026银行副科面试题目及答案
- 四川能投发展股份有限公司所属公司2026年员工公开招聘考试参考题库及答案详解
- 药品车间质量奖惩制度
- 三级安全教育切割作业测试试题附答案
- 老挝用工合同范本
- 检察院安全生产工作制度
- 2026云南昆明巫家坝建设发展有限责任公司校园招聘15人备考题库及答案详解(网校专用)
- 2026云南曲靖国金资本运营集团有限公司招聘3人笔试历年常考点试题专练附带答案详解
- 《小学数学教学设计》小学教育专业全套教学课件
- 2025-2026学年黑龙江省齐齐哈尔市建华区八年级(上)期末英语试卷(含答案)
- 冠心病诊疗指南(2025版)
- 市政设施养护培训课件
评论
0/150
提交评论