SDUT-2804_数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Sample Input
2
dbgeafc
dgebfca
lnixu
linux
Sample Output
4
3
中序后序还原二叉树的方法转至根据先序、中序、后序遍历还原二叉树
以样例一为例:
先以中序后序确定左右子树的中序后序
dbge a fc
dgeb fc a
还原左子树
dbge
dgeb
推出
d b ge
d ge b
还原左子树,d的左右儿子为空,回溯b,还原右子树
g e
g e
还原e的左子树,右子树为空,回溯到b,b的左右子树还原完毕,回溯到根节点,还原右子树。
右子树还原与左子树还原方法一致,不再详述。
- 还原的树
/*******************************/
a
b c
d e f
g
/*******************************/
可以看出最深为a-b-e-g
#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 mid[],char back[],int n)
{
if(n==0)
return NULL;
tree *t;
int i;
t = newtree();
t->data = back[n-1];
for(i=0;i<n;i++)
if(mid[i]==back[n-1])
break;
t->l = creat(mid,back,i);
t->r = creat(mid+i+1,back+i,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 back[55],mid[55];
int n,k;
while(scanf("%d",&k)!=EOF)
{
while(k--)
{
t = newtree();
scanf("%s%s",mid,back);
n = strlen(mid);
t = creat(mid,back,n);
h = 0;
get_high(t,1);
//show(t);
printf("%d\n",h);
}
}
return 0;
}
SDUT-2804_数据结构实验之二叉树八:(中序后序)求二叉树的深度的更多相关文章
- SDUT OJ 数据结构实验之图论八:欧拉回路
数据结构实验之图论八:欧拉回路 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- SDUT 3364 数据结构实验之图论八:欧拉回路
数据结构实验之图论八:欧拉回路 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 在哥尼斯堡的 ...
- SDUT OJ 数据结构实验之排序八:快速排序
数据结构实验之排序八:快速排序 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 给定N ...
- SDUT OJ 数据结构实验之链表八:Farey序列
数据结构实验之链表八:Farey序列 Time Limit: 10 ms Memory Limit: 600 KiB Submit Statistic Discuss Problem Descript ...
- SDUT OJ 数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...
- SDUT 3341 数据结构实验之二叉树二:遍历二叉树
数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知二叉 ...
- SDUT-3331_数据结构实验之链表八:Farey序列
数据结构实验之链表八:Farey序列 Time Limit: 10 ms Memory Limit: 600 KiB Problem Description Farey序列是一个这样的序列:其第一级序 ...
- SDUT 1489 求二叉树的先序遍历 (中序后序还原二叉树)
求二叉树的先序遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 已知一 ...
- 前、中、后序遍历随意两种是否能确定一个二叉树?理由? && 栈和队列的特点和区别
前序和后序不能确定二叉树理由:前序和后序在本质上都是将父节点与子结点进行分离,但并没有指明左子树和右子树的能力,因此得到这两个序列只能明确父子关系,而不能确定一个二叉树. 由二叉树的中序和前序遍历序列 ...
随机推荐
- FamilyFilter(4)
3.1. 基于列族过滤数据的FamilyFilter 构造函数: FamilyFilter(CompareFilter.CompareOp familyCompareOp, ByteArrayComp ...
- ssm整合:搭建环境
解决配置中文过滤器后,存入数据库时依旧乱码问题:在web.xml中修改数据库url如下: <property name="jdbcUrl" value="jdbc: ...
- 如何提高英语听力(内容摘自NECCS)+ 乘法表
乘法表 print('\n'.join([' '.join(['%s*%s=%-2s'%(y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]) ...
- SSM-8FastDfs搭建
1. 图片服务器的安装 1.存储空间可扩展. 2.提供一个统一的访问方式. 使用FastDFS,分布式文件系统.存储空间可以横向扩展,可以实现服务器的高可用.支持每个节点有备份机. 1.1. 什么是F ...
- bootstrap--响应式框架页面环境配置
那就目录结构 页面环境代码: <!DOCTYPE html> <html lang="zh-CN"> <head> <!--默认编码--& ...
- Vue.extend用法
Vue.extend 是构造一个组件的语法器. 用法 Vue.extend ( options ),options 是对象: 使用基础Vue构造器,创建一个子类,参数是一个包含组件选项的对象,data ...
- 玩转webpack之webpack的基本知识
相信看了gulp教程的小伙伴肯定都可以很容易的掌握gulp了.它已经没有什么可以值得去思考的东西了,如果你已经看懂它就是单纯的在布置任务,然后利用插件的功能去执行任务.最后发布任务,pipe的理念来和 ...
- macbook双网卡路由
用route命令可以解决,步骤如下:1)确定你内网的网段,如果有多个都一一列出来,例如:192.168.1.0/24,10.20.0.0/16等 2)确定你内网网卡的网关IP,通过netstat -r ...
- LintCode刷题笔记-- Maximum Product Subarray
标签: 动态规划 描述: Find the contiguous subarray within an array (containing at least one number) which has ...
- Markdown图片