老师给的题目 做了很久 |
|
后序最后是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分 |
左边也是一个道理啊。 |
谢谢 |
|
看了 终于会了 |