文章目录

  • 实验二 树
    • 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语言_实验二_树 ——还原二叉树相关推荐

  1. 网络对抗技术_实验二_网络嗅探与欺骗

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验二 网络嗅探与欺骗     学生姓名 岳庆伟 年级 2014级 ...

  2. 密码学实验报告c语言程序,密码学_实验一_古典密码算法_C语言.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp高等教育&nbsp>&nbsp实验设计 密码学_实验一_古典密码算法_C语言.doc8页 本 ...

  3. 20172328《程序设计与数据结构》实验二:树

    20172328<程序设计与数据结构>实验二:树 课程:<软件结构与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强老师 实验日期:201 ...

  4. c语言程序设计实验指导交大答案,C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc...

    C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc 实验一 Visual C集成环境实验内容(一)程序改错1.(1)无法运行(2)将第二个C程序重 ...

  5. 华信c语言程序设计答案,C语言程序设计实验指导_颜晖_主_....doc

    C语言程序设计实验指导_颜晖_主_....doc C语言程序设计部分实验参考答案 实验2 #include int main(){//2-1-2 int c,f=150; c=f*5/9-32*5/9 ...

  6. 数据结构C语言版(清华大学_唐国民_第3版)单链表

    //数据结构C语言版(清华大学_唐国民_第3版) //单链表功能实现,书 P25 例子2.3.3,与书上代码有些许出入,不用在意,重要的是思路 #include<stdio.h> #inc ...

  7. c语言程序设计实验二模板,C语言程序设计实验二.doc

    C语言程序设计实验二.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所 ...

  8. java文件加密解密实验报告_《网络信息安全技术》_实验报告_破译vigenamp#232;re_密码加密的密文...

    <<网络信息安全技术>_实验报告_破译vigen&amp#232;re_密码加密的密文>由会员分享,可在线阅读,更多相关<<网络信息安全技术>_实验报 ...

  9. 20172319 实验二《树》实验报告

    20172319 2018.11.04-11.12 实验二<树> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1723班 学生姓名:唐才铭 学生学号:20172319 ...

最新文章

  1. python pandas 读写 csv 文件
  2. linux查看设备内存代码,Linux下内存查看命令(示例代码)
  3. ADO.NET SQL
  4. 每日一皮:Bug 变 Feature !惊不惊喜,意不意外,刺不刺激!
  5. xcodeproj cannot be opened because the project file cannot be parsed.
  6. PyTorch系列入门到精通——张量操作线性回归
  7. spring自带任务调度-xml方式
  8. 16g电脑内存有什么好处_电脑内存容量都是16GB, 买单根16G好还是双根8G好呢?
  9. android adb驱动win7,adbwin7下载地址_win7安装adb驱动的方法
  10. DatePickerDialog的确定和取消按钮
  11. The key to acquiring proficiency in any task is repetition
  12. xposed绕过模拟器检测_《绝地求生》手游避开模拟器检测攻略分享
  13. php json接口转化为数组 生成xml接口
  14. AIX 操作系统安全配置指南
  15. Dockerfile构建镜像并发布镜像
  16. arbiter circuit(以Verilog FSM实现仲裁器)
  17. vue中解决模糊搜索输入中文时--未输入完成时触发input事件
  18. python编程一球从100米_【Python3练习题 015】 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?...
  19. BootStrap前端框架网页模板
  20. 心动著境即是魔,随缘分别则无定

热门文章

  1. maven Could not resolve dependencies
  2. 一道贪心:加括号使算式的值最大
  3. 运行jar包提示找不到.properties文件的问题
  4. 敏捷开发一千零一问系列之六:业务人员怎样参与开发?
  5. ORACLE的跟踪文件
  6. HttpClient Get请求实例
  7. Vue cli项目开启Gzip
  8. MUI开发指南(二) webview对象
  9. jQuery.Validate验证库
  10. 如何取到两个日期中的每一天,并且打印出来