




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验四 二叉树操作实现实验日期: 2017 年 4 月 20 日 实验目的及要求1. 熟练掌握树的基本概念、二叉树的基本操作及在链式存储结构上的实现;2. 重点掌握二叉树的创建、遍历及求深度等算法;3. 掌握运用递归方式描述算法及编写递归C程序的方法,提高算法分析和程序设计能力。实验内容键盘输入一个字符串,利用二叉树前序遍历的结果建成一棵二叉树,并用三种遍历方法打印,比较是否与自己预先想象的相一致。再求树的深度、1度结点数、2度节点数,交换二叉树的左右子树并输出交换后的中序遍历结果验证交换的正确性。找到二叉树中序遍历最后一个结点并输出结点值。二叉树结点类型定义:typedef char datatype; typedef struct tnode datatype data; struct tnode *lchild,*rchild; BiTNode,*BiTree; 任务1题目要求创建一个程序文件sy4.cpp,自定义相应函数完成以下操作:(1)void visit(BiTree p) /*输出p指针指向的结点*/(2)void Preorder(BiTree T) /*前序遍历*/(3)void Inorder(BiTree T) /*中序遍历*/(4)void Postorder(BiTree T) /*后序遍历*/(5)BiTree CreateTree( ) /*以前序遍历的顺序建立二叉树*/(6)int deep(BiTree T) /*求二叉树深度*/(7)int leaf(BiTree T) /*求叶子结点数*/(8)int OneChild(BiTree T) /*求1度结点数*/(9)int TwoChild(BiTree T) /*求2度结点数*/(10)void Exchange(BiTree T) /*二叉树左右子树交换*/(11)BiTree InorderLastNode(BiTree T); /*找二叉树中序遍历最后一个结点*/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 。3sy14.cpp源程序清单(含必要的注释)#include#includetypedef char datatype;typedef struct tnode datatype data;struct tnode *lchild, *rchild; BiTNode, *BiTree;void visit(BiTree p); /*输出p指针指向的结点*/void Preorder(BiTree T); /*前序遍历*/void Inorder(BiTree T); /*中序遍历*/void Postorder(BiTree T); /*后序遍历*/BiTree CreateTree(); /*以前序遍历的顺序建立二叉树*/int deep(BiTree T); /*求二叉树深度*/int leaf(BiTree T); /*求叶子结点数*/int OneChild(BiTree T); /*求1度结点数*/int TwoChild(BiTree T); /*求2度结点数*/void Exchange(BiTree T); /*二叉树左右子树交换*/BiTree InorderLastNode(BiTree T); /*找二叉树中序遍历最后一个结点*/void visit(BiTree p) /*输出p指针指向的结点*/if (p-data != #) printf(%c , p-data);void Preorder(BiTree T) /*前序遍历*/if (T != NULL) visit(T); /访问根节点Preorder(T-lchild); /访问左子节点Preorder(T-rchild); /访问右子节点void Inorder(BiTree T) /*中序遍历*/if (T != NULL) Inorder(T-lchild); /访问左子节点visit(T); /访问根节点Inorder(T-rchild); /访问右子节点void Postorder(BiTree T) /*后序遍历*/if (T != NULL) Postorder(T-lchild); /访问左子节点Postorder(T-rchild); /访问右子节点visit(T); /访问根节点BiTree CreateTree() /*以前序遍历的顺序建立二叉树*/char ch;BiTree T;if (ch = getchar() = #) /*#表示空树*/return NULL;else T = (BiTree)malloc(sizeof(BiTNode); /生成根节点T-data = ch;T-lchild = CreateTree(); /构造左子树T-rchild = CreateTree(); /构造右子树return T;int deep(BiTree T) /*求二叉树深度*/int lh, rh;if (T = NULL) return 0;else lh = deep(T-lchild);rh = deep(T-rchild);return (lh rh ? lh : rh) + 1;int leaf(BiTree T) /*求叶子结点数*/int m, n;if (!T) /*空树没有叶子*/return 0;else if (!T-lchild & !T-rchild) /*叶子结点*/return 1;else /*左子树的结点数加上右子树的结点数*/m = leaf(T-lchild);n = leaf(T-rchild);return m + n;int OneChild(BiTree T) /*求1度结点数*/int n = 0;if (T = NULL) return 0;else if (T-lchild = NULL&T-rchild != NULL) | (T-lchild != NULL&T-rchild = NULL) n = 1;return OneChild(T-lchild) + OneChild(T-rchild) + n;int TwoChild(BiTree T) /*求2度结点数*/int n = 0;if (T = NULL) return 0;else if (T-lchild != NULL&T-rchild != NULL)n = 1;return TwoChild(T-lchild) + TwoChild(T-rchild) + n;void Exchange(BiTree T) /*二叉树左右子树交换*/BiTree temp;if (T) temp = T-lchild;T-lchild = T-rchild;T-rchild = temp;Exchange(T-lchild);Exchange(T-rchild);BiTree InorderLastNode(BiTree T) /*找二叉树中序遍历最后一个结点*/if(T)while (T-rchild)T = T-rchild;return T;int main() BiTree T;printf(以前序遍历的二叉树:);T = CreateTree();printf(n先序遍历:);Preorder(T);printf(n);printf(n中序遍历:);Inorder(T);printf(n);printf(n后序遍历:);Postorder(T);printf(n);printf(n树的深度=%dn, deep(T);printf(叶子结点数=%dn, leaf(T);printf(1度结点数=%dn, OneChild(T);printf(2度结点数=%dn, TwoChild(T);printf(n二叉树中序遍历最后一个结点为:%c, InorderLastNode(T)-data);printf(n);printf(n交换后的二叉树先序遍历为:);Exchange(T); Preorder(T);printf(n交换后的二叉树中序遍历
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工现场派工管理制度
- 专业健身俱乐部管理制度
- 核酸采样感染管理制度
- 丹东市公务车辆管理制度
- 移民局部门规章管理制度
- 二手车公司采购管理制度
- 两科室共用设备管理制度
- 早教教师设备管理制度
- 智能财务团队管理制度
- mes系统使用管理制度
- 系统商用密码应用方案v5-2024(新模版)
- 核磁共振(NMR)讲课
- 基于单片机的彩灯控制器设计
- 2024至2030年中国医疗信息化市场潜力与投资前景分析报告
- 四川省成都市成华区2023-2024学年七年级下学期期末生物试题(原卷版)
- 走进黄帝内经文化殿堂智慧树知到答案2024年上海中医药大学
- 配电房预试验服务和维保方案
- 东南亚文化智慧树知到期末考试答案章节答案2024年天津外国语大学
- 安徽省阜阳市太和县2023-2024学年八年级下学期期末英语试题
- 个体诊所备案承诺书模板
- QCT1164-2022汽车用天然气滤清器
评论
0/150
提交评论