//求二叉树的深度
#include<iostream>
using namespace std;
struct tree{
int root;
tree*right,*left;
};
int depth(tree* t)
{
if(t==NULL) return 0;
return 1+max(depth(t->left),depth(t->right));
}
tree* create_tree(int pre[],int s1,int n1,int in[],int s2,int n2)
{
if(s1>n1||s2>n2) return NULL;
tree* t=new tree;
t->root=pre[s1];
int i=s2,r=pre[s1];
for(;i<=n2&&in[i]!=r;++i);
if(i==s2) t->left=NULL;
else t->left=create_tree(pre,s1+1,i-s2+s1,in,s2,i-1);
if(i==n2) t->right=NULL;
else t->right=create_tree(pre,1+i-s2+s1,n1,in,i+1,n2);
return t;
}
void post_visit(tree*t)
{
if(t==NULL) return ;
post_visit(t->left);
post_visit(t->right);
cout<<t->root<<' ';
}
int main()
{
int n;
cin>>n;
int pre[n],in[n];
for(int i=0;i<n;i++) cin>>pre[i];
for(int i=0;i<n;i++) cin>>in[i];
tree* t=create_tree(pre,0,n-1,in,0,n-1);
cout<<depth(t)<<endl;
post_visit(t);
return 0;
}
/*
8
1 2 4 5 7 8 3 6
4 2 7 5 8 1 3 6
4
4 7 8 5 2 6 3 1*/
由前序和中序求二叉树的深度
最新推荐文章于 2021-11-09 21:18:17 发布