




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验四 二叉树操作实现实验日期: 2017 年 4 月 20 日 实验目的及要求1. 熟练掌握树的基本概念、二叉树的基本操作及在链式存储结构上的实现;2. 重点掌握二叉树的创建、遍历及求深度等算法;3. 掌握运用递归方式描述算法及编写递归C程序的方法,提高算法分析和程序设计能力。实验内容键盘输入一个字符串,利用二叉树前序遍历的结果建成一棵二叉树,并用三种遍历方法打印,比较是否与自己预先想象的相一致。再求树的深度、1度结点数、2度节点数,交换二叉树的左右子树并输出交换后的中序遍历结果验证交换的正确性。找到二叉树中序遍历最后一个结点并输出结点值。二叉树结点类型定义:typedef char dat
2、atype; 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( ) /*以前序遍
3、历的顺序建立二叉树*/(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 个用于链接孩子
4、结点, 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为二叉树的根
5、的地址,该树是空二叉树满足条件: T=NULL 。3sy14.cpp源程序清单(含必要的注释)#include<stdio.h>#include<stdlib.h>typedef 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); /*中序遍历*/
6、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
7、(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
8、); /访问根节点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(
9、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
10、 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
11、!= 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
12、(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(
13、) 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("叶子结点数=%
14、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交换后的二叉树中序遍历为:");Inorder(T);pr
15、intf("n交换后的二叉树后序遍历为:");Postorder(T);printf("n");printf("n交换后的二叉树中序遍历最后一个结点为:%c", InorderLastNode(T)->data);printf("n");return 0;4程序执行后屏幕上的输入输出内容 A / B /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 标记技术的试题及答案
- 船员网考船长试题及答案
- 法治德治面试题及答案
- 生活化学大学化学考试试题及答案
- 确保工程安全的管理措施试题及答案
- 驾校考试试题及答案解析
- 道路工程的环境影响试题及答案
- 木兰县公务员试题及答案
- 物理第5章试题及答案
- 塔吊师傅考试试题及答案
- 主题班会AI时代中学生的机遇与成长
- 供电公司故障抢修服务规范
- 初中体育课堂安全教育
- 码头安全生产知识
- 《年产100公斤阿司匹林生产工艺设计》8700字(论文)
- 全屋整装培训
- 《风电安全生产培训》课件
- 常见病用药指导技术知到智慧树章节测试课后答案2024年秋天津生物工程职业技术学院
- 2025年日历(日程安排-可直接打印)
- 保密法律法规
- 铸牢中华民族共同体意识-形考任务1-国开(NMG)-参考资料
评论
0/150
提交评论