求二叉树的深度

mac2022-06-30  17

求二叉树的深度

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>      typedef struct node   {       char data;       struct node *lchild; //左孩子指针struct node *rchild;  //右孩子指针 }tree;      tree *creat(char *pre,char *in,int len) //创建二叉树  {       tree *p;       if(len<=0) //返回上一层函数调用,{         p=NULL;  }     else       {           p=(tree *)malloc(sizeof(tree));  //开辟新的内存空间         p->data=*(pre+len-1); //将pre[]的最后一个字符赋给p->data;         char *a;           for(a=in;a!=NULL;a++)  //查找p->data在in[]字符串的位置             if(*a==*(pre+len-1))  {             break;  }         int l=a-in;  //p->data在in[]字符串的位置         p->lchild=creat(pre,in,l);           p->rchild=creat(pre+l,a+1,len-l-1);       }       return p;   }      int deep(tree *t)   {       if(!t)           return 0;       int lchild,rchild;       lchild=deep(t->lchild);       rchild=deep(t->rchild);       return lchild>rchild?lchild+1:rchild+1;   }      int main()   {       int t;       scanf("%d",&t);       tree *T;       while(t--)       {           char str1[55],str2[55];           scanf("%s%s",str1,str2);           int l=strlen(str1);           T=creat(str2,str1,l);           printf("%d\n",deep(T));       }   }  

转载于:https://www.cnblogs.com/CCCrunner/p/6444637.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)