数据结构实验之二叉树八:(中序后序)求二叉树的深度
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
**Hint
Source**
PS:先在后序遍历中从后向前找到一个根结点;再在中序遍历中找到该结点,则中序遍历中该结点左边为左子树,右边为右子树。依次循环。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
int data;
struct node *l,*r;
} bitnode;
bitnode *creat(int l,char hx[],char zx[])
{
int i;
bitnode *root;
if(l==0) return NULL;
root=(bitnode *)malloc(sizeof(bitnode));
root->data=hx[l-1];
for(i=0; i<l; i++)
{
if(zx[i]==hx[l-1])
break;
}
root->l=creat(i,hx,zx);
root->r=creat(l-i-1,hx+i,zx+i+1);
return root;
}
int high(bitnode *root)
{
if(root==NULL) return 0;
int lhigh=high(root->l)+1;
int rhigh=high(root->r)+1;
return lhigh>rhigh ? lhigh:rhigh;
}
int main()
{
int t,l,z;
char hx[55],zx[55];
bitnode *root;
scanf("%d",&t);
while(t--)
{
scanf("%s %s",zx,hx);
l=strlen(zx);
root=creat(l,hx,zx);
z=high(root);
printf("%d\n",z);
}
return 0;
}