struct node{
int data;
node* lchild;
node* rchild;
};
int n;
int in[maxn],post[maxn];//数组
node* create(int h1,int h2 ,int l){
//h1和h2分别是两个数组的第一个元素下标,l是数组长度
if(!l) return nullptr;
node* p = new node();
p->data = post[h2+l-1];
int i;
for(i=0;;i++) if(p->data == in[i]) break;
int l1 = i-h1;//左孩子长度
int l2 = l-l1-1;//右孩子长度
p->lchild = create(h1,h2,l1);
p->rchild = create(i+1,h2+l1,l2);
return p;
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&post[i]);
for(int i=0;i<n;i++) scanf("%d",&in[i]);
node* root = create(0,0,n);
return 0;
}
通过中序遍历和后序遍历构建二叉树
最新推荐文章于 2024-05-17 21:51:18 发布