数据结构实验之二叉树四:(先序中序)还原二叉树
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
(先序中序还原二叉树) + (树的高度)
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct TreeNode *BinTree;
typedef char ElementType;
typedef BinTree Position;
struct TreeNode
{
ElementType Data;
BinTree last;
BinTree next;
};
char st[55];
int cnt;
struct TreeNode *creat(int n,char *a,char *b)
{
struct TreeNode *root;
char *p;
if(n==0)
return NULL;
root=(struct TreeNode *)malloc(sizeof(struct TreeNode));
root->Data=a[0];
for(p=b; p!='\0'; p++)
if(*p==a[0])
break;
int t;
t=p-b;
root->last=creat(t,a+1,b);
root->next=creat(n-t-1,a+t+1,p+1);
return root;
}
int high(struct TreeNode *root)
{
int i, j;
if(!root)return 0;
if(root->last)
i = high(root->last);
else i =0;
if(root->next)
j =high(root->next);
else j = 0;
return i>j?i+1:j+1;
}
int main()
{
int m;
struct TreeNode *root;
root = (struct TreeNode *)malloc(sizeof(struct TreeNode));
char a[100],b[100];
while(~scanf("%d",&m))
{
scanf("%s %s",a,b);
root = creat(m,a,b);
printf("%d\n",high(root));
}
return 0;
}