SDUT-3343_数据结构实验之二叉树四:(先序中序)还原二叉树
数据结构实验之二叉树四:(先序中序)还原二叉树
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Sample Input
9
ABDFGHIEC
FDHGIBEAC
Sample Output
5
先序中序还原二叉树的方法转至根据先序、中序、后序遍历还原二叉树
题解:
根据先序中序我们可以确认他的左右子树的先序中序
A BDFGHIE C
FDHGIBE A C
还原左子树
BDFGHIE
FDHGIBE
推出
B DFGHI E
FDHGI B E
继续还原
D F GHI
F D HGI
再一次之后D的左子树还原完毕回溯至D还原右子树。、
G H I
H G I
再一次之后D的左右子树还原完毕,回溯至B,还原右子树,这样根节点的左子树还原完毕,右子树还原方式与左子树一致,这里不详述了。
还原之后
/*****************************************/
A
B C
D E
F G
H I
/****************************************/
可以看出最深为 A-B-D-G-H或A-B-D-G-I
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tree
{
char data;
struct tree *l,*r;
}tree;
tree *newtree()
{
tree *t;
t = (tree*)malloc(sizeof(tree));
t->l = t->r = NULL;
return t;
}
int h;
tree *creat(char front[],char mid[],int n) //利用递归方法建树,n代表字符串的长度
{
if(n==0)
return NULL;
tree *t;
int i;
t = newtree();
t->data = front[0];
for(i=0;i<n;i++)
if(mid[i]==front[0])
break;
t->l = creat(front+1,mid,i);
t->r = creat(front+i+1,mid+i+1,n-i-1);
return t;
}
void get_high(tree *t,int i) //统计二叉树的高度(深度),即看它最长的分支有多长
{
if(t)
{
if(h<i)
h = i;
get_high(t->l,i+1);
get_high(t->r,i+1);
}
}
void show(tree *t)
{
if(t)
{
printf("%c",t->data);
show(t->l);
show(t->r);
}
}
int main()
{
tree *t;
char front[55],mid[55];
int n;
while(scanf("%d",&n)!=EOF)
{
t = newtree();
scanf("%s%s",front,mid);
t = creat(front,mid,n);
h = 0;
get_high(t,1);
//show(t);
printf("%d\n",h);
}
return 0;
}
SDUT-3343_数据结构实验之二叉树四:(先序中序)还原二叉树的更多相关文章
- SDUT 3401 数据结构实验之排序四:寻找大富翁.!
数据结构实验之排序四:寻找大富翁 Time Limit: 150MS Memory Limit: 512KB Submit Statistic Problem Description 2015胡润全球 ...
- SDUT OJ 数据结构实验之图论四:迷宫探索
数据结构实验之图论四:迷宫探索 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- SDUT OJ 数据结构实验之排序四:寻找大富翁
数据结构实验之排序四:寻找大富翁 Time Limit: 200 ms Memory Limit: 512 KiB Submit Statistic Discuss Problem Descripti ...
- SDUT OJ 数据结构实验之链表四:有序链表的归并
数据结构实验之链表四:有序链表的归并 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Desc ...
- SDUT 3376 数据结构实验之查找四:二分查找
数据结构实验之查找四:二分查找 Time Limit: 20MS Memory Limit: 65536KB Submit Statistic Problem Description 在一个给定的无重 ...
- SDUT 3361 数据结构实验之图论四:迷宫探索
数据结构实验之图论四:迷宫探索 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 有一个地下迷 ...
- SDUT OJ 数据结构实验之二叉树四:(先序中序)还原二叉树
数据结构实验之二叉树四:(先序中序)还原二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem ...
- SDUT OJ 数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...
- SDUT-3376_数据结构实验之查找四:二分查找
数据结构实验之查找四:二分查找 Time Limit: 30 ms Memory Limit: 65536 KiB Problem Description 在一个给定的无重复元素的递增序列里,查找与给 ...
随机推荐
- fidder下载及使用
fidder 下载地址:https://www.telerik.com/download/fiddler 安装采用默认方式安装即可.
- @import vs #import - iOS 7
It's a new feature called Modules or "semantic import". There's more info in the WWDC 2013 ...
- WPF 的另类资源方式 Resources.resx
类似Winform的搞法,可以把资源放到Resources.resx中. 1.字符串 打开这个编辑器后,输入Name和Value就可以了. CS代码里面,很简单的调用: var title = W ...
- tomcat9 gzip
我认为apr模式比较屌所以 <Connector port=" protocol="org.apache.coyote.http11.Http11AprProtocol&qu ...
- java-io流入门
一 概述 已学习过的API常见对象解决的问题: 字符串String--操作文本数据.字符串缓冲区---容器,可以存储很多的任意类型的数据--字符串. 基本数据类型包装类---解决了字符串和基本数据类型 ...
- golang之switch
- javascript:void(0);用法及常见问题解析
void 操作符用法格式: javascript:void (expression) 下面的代码创建了一个超级链接,当用户以后不会发生任何事.当用户链接时,void(0) 计算为 0,但 Javasc ...
- Kibana将语言设置为中文
6.7以后系统开始支持中文了,修改语言只需要添加一行配置即可. 设置方法 在kibana.yml配置文件中添加一行配置 i18n.locale: "zh-CN" 修改后重启,可以看 ...
- ASP.NET 自定义服务器控件
文章内容 本文通过创建一个最简单的服务器控件,演示开发服务器端控件的流程. 文章内容整理自MSDN的编程指南,原文地址在文章末尾的资源中. 本文创建一个简单的服务器控件,名为 RedLabel. ...
- Python中的进程池与线程池(包含代码)
Python中的进程池与线程池 引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用su ...