数据结构实验之二叉树四:还原二叉树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入
输入数据有多组,每组数据第一行输入
1
个正整数
N(1 <= N <= 50)
为树中结点总数,随后
2
行先后给出先序和中序遍历序列,均是长度为
N
的不包含重复英文字母
(
区分大小写
)
的字符串。
输出
输出一个整数,即该二叉树的高度。
示例输入
9 ABDFGHIEC FDHGIBEAC
示例输出
5
#include <stdio.h> #include <stdlib.h> struct node { char ch; struct node *lc,*rc; }; char s1[128],s2[128]; struct node *creat(char *s1,char *s2,int len) { struct node *root; char *x; int m; if(len<=0) return NULL; root=(struct node *)malloc(sizeof(struct node)); root->ch=*s1;//先序第一个为根 for(x=s2;x!=NULL;x++)//查找中序的根位置 if(*x==*s1) break; m=x-s2;//左子树长度 root->lc=creat(s1+1,s2,m); root->rc=creat(s1+m+1,x+1,len-m-1);//找右子树 return root; } int deep(struct node *root) { int l,r; if(!root) return 0; else { l=deep(root->lc); r=deep(root->rc); if(l>=r) return l+1; else return r+1; } return 1; } int main() { int n,len; struct node *root; while(~scanf("%d",&n)) { scanf("%s%s",s1,s2); root=(struct node *)malloc(sizeof(struct node)); root=creat(s1,s2,n);//建树 printf("%d\n",deep(root)); } return 0; }