中序先序
数据结构实验之二叉树四:(先序中序)还原二叉树
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
Hint
Source
xam
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node
{
char ch ;
struct node *left ;
struct node *right ;
}Tree ;
char a[56] ;
char b[56] ;
Tree *creat(char *a ,char *b ,int n)
{
if(n == 0)
return NULL ;
int d , i ;
Tree *root = (Tree*)malloc(sizeof(Tree)) ;
for(i = 0 ; i<n ;i++)
{
if(b[i] == a[0])
{
break ;
}
}
d = i ;
root->left = creat(a+1,b,d) ;
root->right = creat(a+1+d,b+d+1,n-d-1) ;
return root ;
}
int high(Tree *root)
{
if(root)
{
int l , r ;
l = high(root->left) ;
r = high(root->right) ;
return (l>r?l:r)+1 ;
}
return 0 ;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
scanf("%s %s",a,b) ;
Tree *root ;
root = creat(a,b,n) ;
int h = high(root) ;
printf("%d\n",h) ;
}
return 0 ;
}
后序中序
数据结构实验之二叉树八:(中序后序)求二叉树的深度
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Sample Input
2 dbgeafc dgebfca lnixu linuxSample Output
4 3Hint
Source
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node
{
char ch ;
struct node *left ;
struct node *right ;
}Tree ;
Tree *creat(char *a ,char *b ,int n)
{
if(n == 0)
return NULL ;
int d , i ;
Tree *root = (Tree*)malloc(sizeof(Tree)) ;
root->ch = a[n-1] ;
for(i = 0 ; i<n ;i++)
{
if(b[i] == a[n-1])
{
break ;
}
}
d = i ;
root->left = creat(a,b,d) ;
root->right = creat(a+d,b+d+1,n-d-1) ;
return root ;
}
int high(Tree *root)
{
if(root)
{
int l , r ;
l = high(root->left) ;
r = high(root->right) ;
return (l>r?l:r)+1 ;
}
return 0 ;
}
int main()
{
int t ;
char a[56] ;
char b[56] ;
scanf("%d",&t) ;
while(t--)
{
scanf("%s %s",b,a);
int len = strlen(b) ;
Tree *root = creat(a,b,len) ;
int d = high(root) ;
printf("%d\n",d) ;
}
return 0 ;
}