求二叉树的深度
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
输入
输入数据有多组,输入T组数据。每组数据包括两个长度小于<font face="\"Times" new="" roman,="" serif\"="" style="padding: 0px; margin: 0px;">50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
输出
输出二叉树的深度。
示例输入
2 dbgeafc dgebfca lnixu linux
示例输出
4 3
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<queue>
using namespace std;
typedef char type;
typedef struct tnode
{
struct tnode *lc;
struct tnode *rc;
type data;
}tnode,*tree;
tree creat(char *mid,char *hin,int len)
{
tree T;
if(len<=0)
return NULL;
T=(tree)malloc(sizeof(tnode));
char *p;
T->data=*hin;
for(p=mid;p!=NULL;p++)
if(*p==*hin)
break;
int llen=p-mid;
T->rc=creat(p+1,hin-1,len-llen-1);
T->lc=creat(mid,(hin-len+llen),llen);
return T;
}
int countdepth(tree &T)
{
int ldepth,rdepth;
if(!T)
return 0;
else
{
ldepth=countdepth(T->lc);
rdepth=countdepth(T->rc);
return ldepth>rdepth?ldepth+1:rdepth+1;
}
}
int main()
{
tree T;
char mids[60],hins[60];
int t,len,depth;
char *hin;
scanf("%d",&t);
while(t--)
{
scanf("%s\n%s",mids,hins);
len=strlen(mids);
hin=&hins[len-1];
T=creat(mids,hin,len);
depth=countdepth(T);
printf("%d\n",depth);
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<queue>
using namespace std;
typedef char type;
typedef struct tnode
{
struct tnode *lc;
struct tnode *rc;
type data;
}tnode,*tree;
tree creat(char *mid,char *hin,int len)
{
tree T;
if(len<=0)
return NULL;
T=(tree)malloc(sizeof(tnode));
char *p;
T->data=*hin;
for(p=mid;p!=NULL;p++)
if(*p==*hin)
break;
int llen=p-mid;
T->rc=creat(p+1,hin-1,len-llen-1);
T->lc=creat(mid,(hin-len+llen),llen);
return T;
}
int countdepth(tree &T)
{
int ldepth,rdepth;
if(!T)
return 0;
else
{
ldepth=countdepth(T->lc);
rdepth=countdepth(T->rc);
return ldepth>rdepth?ldepth+1:rdepth+1;
}
}
int main()
{
tree T;
char mids[60],hins[60];
int t,len,depth;
char *hin;
scanf("%d",&t);
while(t--)
{
scanf("%s\n%s",mids,hins);
len=strlen(mids);
hin=&hins[len-1];
T=creat(mids,hin,len);
depth=countdepth(T);
printf("%d\n",depth);
}
return 0;
}