2804 資料結構實驗之二叉樹八:(中序後序)求二叉樹的深度
阿新 • • 發佈:2019-02-16
#include<iostream>
#include <malloc.h>
#include<string.h>
using namespace std;
struct node
{
char data;
struct node *rchild,*lchild;
}tree;
struct node *creat(char *a1,char*a2,int n)
{
struct node *root;
if(n<=0) return NULL;
else
{
root=(struct node *)malloc (sizeof(struct node ));
root->data=a2[n-1];
//將後序遍歷的最後一個節點當作當前子樹的根
/* 指標形式
char *a;
for (a=a1;a!=NULL;a++)
{
if(*a==a2[n-1])
break;
}
int lchildroot=a-a1;//左子樹的長度
root->lchild=creat(a1,a2,lchildroot);
root->rchild=creat(a1+1+lchildroot,a2+lchildroot,n-lchildroot-1);
*/
int i; //陣列形式
for ( i=0;i<n;i++)
{
if(a1[i]==a2[n-1])
break;
}
int lchildroot=i;//左子樹的長度
root->lchild=creat(a1,a2,lchildroot);
root->rchild=creat(a1+1+lchildroot,a2+lchildroot,n-lchildroot-1);
}
return root;
};
int deep(struct node *root)
{
int d=0;
if(root)
{
int l=deep(root->lchild);
int r=deep(root->rchild);
d=l>r?l+1:r+1;
}
return d;
}
int main()
{
int n,x;
cin>>x;
while(x--)
{
char a1[55],a2[55];
struct node *root;
cin>>a1>>a2;
n=strlen(a1);
root=creat(a1,a2,n);
cout<<deep(root)<<endl;
}
}