求二叉树的深度


求二叉树的深度
Time Limit: 1000MS Memory limit: 65536K

题目描述

已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。

输入

输入数据有多组,输入50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。

输出

输出二叉树的深度。

示例输入

2
dbgeafc
dgebfca
lnixu
linux

示例输出

4
3

提示

 

来源

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
 
typedef struct node 

    char data; 
    struct node *lchild,*rchild; 
}tree; 
 
tree *creat(char *late,char *mid,int len) 

    tree *root; 
    if(len<=0) 
        root=NULL; 
    else 
    { 
        root=(tree *)malloc(sizeof(tree)); 
        root->data=*(late+len-1);  //依据后序遍历序列的最后一个元素
                                  // 确定根节点
        char *a; 
        for(a=mid;a!=NULL;a++) 
            if(*a==*(late+len-1)) 
            break;  //在中序序列中找到后序遍历序列中确定的根节点
        int l=a-mid; //中序遍历过的元素
        root->lchild=creat(late,mid,l); 
       root->rchild=creat(late+l,a+1,len-l-1);  //根节点右边为右孩子
    } 
    return root; 

 
int deep(tree *root) 

    if(!root) 
        return 0; 
    int m,n; 
    m=deep(root->lchild); 
    n=deep(root->rchild); 
    return m>n?m+1:n+1; 

 
int main() 

    int t; 
    scanf("%d",&t); 
    tree *root; 
    while(t--) 
    { 
        char str1[55],str2[55]; 
        scanf("%s%s",str1,str2); 
        int l=strlen(str1); 
        root=creat(str2,str1,l); 
        printf("%d\n",deep(root)); 
    } 
 return 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值