数据结构_C语言_实验二_树 ——还原二叉树
文章目录
- 实验二 树
- 1. 实验目的
- 2. 实验内容
- 3. 实验要求
- 4. 实验过程
- (1) 问题描述
- (2) 数据结构与算法设计
- (3) 程序实现
- (4) 实验结果
- (5) 实验总结
实验二 树
——还原二叉树
1. 实验目的
熟练掌握二叉树存储结构、遍历及应用。
2. 实验内容
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
3. 实验要求
(1) 输入格式说明:
输入首先给出正整数N(<=50),为树中结点总数。下面2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
(2) 输出格式说明:
输出为一个整数,即该二叉树的高度。
(3) 样例输入与输出:
序号 | 输入 | 输出 |
---|---|---|
1 |
9 ABDFGHIEC FDHGIBEAC |
5 |
2 |
15 cdefghijklmnxyz cdefghijklmnxyz |
15 |
3 |
7 Abcdefg gfedcbA |
7 |
4 |
1 a a |
1 |
4. 实验过程
(1) 问题描述
(问题分析及功能描述)
(2) 数据结构与算法设计
(逻辑结构分析+存储结构设计+关键算法思路+伪代码或流程图)
(3) 程序实现
(函数说明+函数之间的调用关系+关键算法的实现代码)
#include <stdio.h>
#include <stdlib.h>typedef struct node {char data;//数据域struct node* lChild;//左孩子struct node* rChild;//右孩子
}BiNode,*BiTree;BiTree CreatTree(char *in, char *pre, int inStrt, int inEnd);
//利用中序序列in和前序序列pre递归构造一棵大小为n的二叉树,inStart和inEnd的初始值应当为0和n-1int search(char arr[], int start, int end, char value);
//在数组 arr[start...end] 中查找值 value的下标BiNode* newNode(char data);
/* * 辅助函数 * 利用给定的数据域 data 分配一个新结点,该节点的 left 和 right 域均为 NULL * 并返回指向该结点的指针 */int Depth (BiTree T);//返回二叉树深度int main()
{int n; //声明变量存储树的节点个数.scanf("%d",&n);char pre[n+1],in[n+1]; //声明字符数组分别存储先序和中序遍历序列scanf("%s",pre); //读入先序序列scanf("%s",in); //读入中序序列BiTree tree = CreatTree(in, pre, 0, n-1);//建树printf("%d",Depth(tree)); //输出树的高度return 0;
}int preIndex = 0; //前序序列索引
BiTree CreatTree(char *in, char *pre, int inStrt, int inEnd)
{if (inStrt > inEnd)return NULL;// 利用索引 preIndex 从前序序列中取出一个元素,并利用此元素创建一个二叉树结点// 最后索引值 preIndex 加 1BiNode* tNode = newNode(pre[preIndex++]);// 如果此结点没有孩子则返回if (inStrt == inEnd)return tNode;//否则在中序序列中找到此元素的索引int inIndex = search(in, inStrt, inEnd, tNode->data);// 利用中序索引构造左子树与右子树tNode->lChild = CreatTree(in, pre, inStrt, inIndex -1);tNode->rChild = CreatTree(in, pre, inIndex +1, inEnd);return tNode;
}int search(char arr[], int start, int end, char value)
{int i;for (i = start; i <= end; i++) {if (arr[i] == value)return i;}
}BiNode* newNode(char data)
{BiTree node = (BiTree)malloc(sizeof(BiNode));node->data = data;node->lChild = NULL; node->rChild = NULL;return node;
}int Depth (BiTree T){int depth,lDepth,rDepth;if ( !T ) depth = 0;else {lDepth = Depth( T->lChild );rDepth= Depth( T->rChild );depth = (lDepth>rDepth?lDepth:rDepth)+1;}return depth;
}
(4) 实验结果
(运行截图+结果分析描述+遇到的问题和解决办法等)
(5) 实验总结
(实验体会、学习收获、过程总结等)
以下再给出一种无需建树的算法:
#include <stdio.h>int max(int a,int b){return a>b?a:b;
}int Depth(char* pre,char* in,int n);//求给定先序和中序序列对应的树的高度int main()
{int n;//声明变量存储树的节点个数.scanf("%d",&n);char pre[n+1],in[n+1]; //声明字符数组分别存储先序和中序遍历序列scanf("%s",pre);//读入先序序列scanf("%s",in);//读入中序序列printf("%d",Depth(pre,in,n));//输出先序和中序序列对应的树的高度return 0;
}int Depth(char* pre,char* in,int n) //pre:先序序列; in:中序序列; n:节点个数;
{int left,right,i;if(n == 0) //若没有结点,为空树{return 0;}for(i = 0; i < n; i++){if(in[i] == pre[0]) //找到根结点在中序的位置{break;}}left = Depth(pre+1,in,i); //左子树的深度right = Depth(pre+i+1,in+i+1,n-i-1); //右子树的深度return max(left,right)+1; //返回左右子树深度的较大值中的较大值+根结点
}
数据结构_C语言_实验二_树 ——还原二叉树相关推荐
- 网络对抗技术_实验二_网络嗅探与欺骗
中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告 实验二 网络嗅探与欺骗 学生姓名 岳庆伟 年级 2014级 ...
- 密码学实验报告c语言程序,密码学_实验一_古典密码算法_C语言.doc
您所在位置:网站首页 > 海量文档  > 高等教育 > 实验设计 密码学_实验一_古典密码算法_C语言.doc8页 本 ...
- 20172328《程序设计与数据结构》实验二:树
20172328<程序设计与数据结构>实验二:树 课程:<软件结构与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强老师 实验日期:201 ...
- c语言程序设计实验指导交大答案,C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc...
C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc 实验一 Visual C集成环境实验内容(一)程序改错1.(1)无法运行(2)将第二个C程序重 ...
- 华信c语言程序设计答案,C语言程序设计实验指导_颜晖_主_....doc
C语言程序设计实验指导_颜晖_主_....doc C语言程序设计部分实验参考答案 实验2 #include int main(){//2-1-2 int c,f=150; c=f*5/9-32*5/9 ...
- 数据结构C语言版(清华大学_唐国民_第3版)单链表
//数据结构C语言版(清华大学_唐国民_第3版) //单链表功能实现,书 P25 例子2.3.3,与书上代码有些许出入,不用在意,重要的是思路 #include<stdio.h> #inc ...
- c语言程序设计实验二模板,C语言程序设计实验二.doc
C语言程序设计实验二.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所 ...
- java文件加密解密实验报告_《网络信息安全技术》_实验报告_破译vigenamp#232;re_密码加密的密文...
<<网络信息安全技术>_实验报告_破译vigen&#232;re_密码加密的密文>由会员分享,可在线阅读,更多相关<<网络信息安全技术>_实验报 ...
- 20172319 实验二《树》实验报告
20172319 2018.11.04-11.12 实验二<树> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1723班 学生姓名:唐才铭 学生学号:20172319 ...
最新文章
- python pandas 读写 csv 文件
- linux查看设备内存代码,Linux下内存查看命令(示例代码)
- ADO.NET SQL
- 每日一皮:Bug 变 Feature !惊不惊喜,意不意外,刺不刺激!
- xcodeproj cannot be opened because the project file cannot be parsed.
- PyTorch系列入门到精通——张量操作线性回归
- spring自带任务调度-xml方式
- 16g电脑内存有什么好处_电脑内存容量都是16GB, 买单根16G好还是双根8G好呢?
- android adb驱动win7,adbwin7下载地址_win7安装adb驱动的方法
- DatePickerDialog的确定和取消按钮
- The key to acquiring proficiency in any task is repetition
- xposed绕过模拟器检测_《绝地求生》手游避开模拟器检测攻略分享
- php json接口转化为数组 生成xml接口
- AIX 操作系统安全配置指南
- Dockerfile构建镜像并发布镜像
- arbiter circuit(以Verilog FSM实现仲裁器)
- vue中解决模糊搜索输入中文时--未输入完成时触发input事件
- python编程一球从100米_【Python3练习题 015】 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?...
- BootStrap前端框架网页模板
- 心动著境即是魔,随缘分别则无定