




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年济宁市兖州区事业单位公开招聘工作人员(教育类)(9人)考前自测高频考点模拟试题及答案详解(网校专用)
- 2025广东佛山市商务局招考专业技术雇员1人模拟试卷及答案详解(易错题)
- 2025年甘肃省庆阳市华池县事业单位选调工作人员模拟试卷及答案详解(必刷)
- 2025湖南长沙海关招聘12360服务热线话务员模拟试卷及答案详解(易错题)
- 2025广东中山市教体系统事业单位第四期招聘事业单位人员79人考前自测高频考点模拟试题及1套完整答案详解
- 2025湖南怀化市洪江市创业投资有限责任公司招聘考前自测高频考点模拟试题及答案详解1套
- 2025年甘肃省平凉市华亭市第二人民医院招聘编外人员模拟试卷及参考答案详解1套
- 拓展木材产品在旅游景区的销售创新创业项目商业计划书
- 心理健康APP营创新创业项目商业计划书
- 核桃油DHA儿童补充剂创新创业项目商业计划书
- 采光顶玻璃拆除施工方案
- 医院电梯乘坐安全培训课件
- 2025重庆市勘测院有限公司招聘6人考试参考题库及答案解析
- 钢厂安全教育培训课件
- 第一部分 第七章 第41课时 气象灾害(重难课时)2026年高考地理第一轮总复习
- 2025年中考数学真题知识点分类汇编之二次函数(四)
- 2025年注册会计师题库带答案分析
- 呼吸科出科考试题临床及答案2025版
- 2023年政府采购评审专家考试真题模拟汇编(共681题)
- 年6万吨废植物油回收利用项目立项申请报告
- 富贵包形成原因及治疗方法
评论
0/150
提交评论