int inorder[35],postorder[35];
typedef struct node{
int data;
struct node *lchild;
struct node *rchild;
}*Tree, node;
Tree creat(int in_l, int in_r, int post_l,int post_r){
if(post_l>post_r)return NULL;
int post_root = post_r;
int in_root;
for(int i=in_l;i<=in_r;++i){
if(postorder[post_root]==inorder[i]){
in_root=i;break;
}
}
Tree root = (node*)malloc(sizeof(node));
root->lchild=NULL,root->rchild=NULL;
root->data=inorder[in_root];
int left_subtree_size=in_root-in_l;
root->lchild=creat(in_l,in_root-1,post_l,post_l+left_subtree_size-1);
root->rchild=creat(in_root+1,in_r,post_l+left_subtree_size,post_r-1);
return root;
}
void solve(){
int n=read();
for(int i=0;i<n;++i)postorder[i]=read();
for(int i=0;i<n;++i)inorder[i]=read();
Tree T = creat(0,n-1,0,n-1);
}
7-1 根据后序和中序遍历建立二叉树
最新推荐文章于 2024-06-01 23:14:10 发布