|
老师给的题目 做了很久 |
|
![]() 后序最后是A,所以A是根,在中序中以A为界分成两半,后半部分是ECHF,在后序中A之前是C,所以A的右子树以C为根,而中序是ECHF,所以C的左子树只有一个节点E,后序中C前面是F,所以C的右子树以F为根,中序为HF,所以H是F的左孩子节点。中序中A的前半部分也是同样道理分析即可。 |
|
|
其实我知道右边,我是分析不出左边
|
|
| 5分 |
struct btree{
btree * left, *right;
char c;
};
btree *build(const char *post,const char *lastpost,
const char *in, const char *lastin)
{
assert(lastpost-post==lastin-in);
if(post==lastpost) return NULL;
btree *rt =(btree *)malloc(sizeof(*rt));
rt->c =lastpost[-1];
const char *p=strchr(in,rt->c);
const char *mid =p-in+post;
rt->left =build(post,mid,in,p);
rt->right=build(mid,lastpost-1,p+1,lastin);
return rt;
}
int main()
{
const char *in ="DIGJLKBAECHF";
const char *post ="ILKJGDBEHFCA";
int len=strlen(post);
btree *root =build(post,post+len,in,in+len);
return 0;
}
|
| 35分 |
左边也是一个道理啊。 |
|
谢谢 |
|
|
看了 终于会了 |
|
