二叉树重建

来源:互联网 发布:mac 免费的数据库软件 编辑:程序博客网 时间:2024/04/30 21:00

面试常考的一道题是二叉树的重建,比如给了先根遍历和中根遍历,让重构二叉树之类的,还有就是输出后根遍历。

例如:DBACEGF   ABCDEFG。输出 ACBFGED

思路:先根遍历第一个字符是根,需要在中根遍历中找到它,就知道左右子树的先根遍历和后根遍历了。(递归)

代码:

void build(int n , char* s1 , char* s2 , char* s){if(n <= 0) return;int p = strchr(s2 , s1[0]) - s2;//找到根结点在中根遍历中的位置build(p , s1+1 , s2 , s);//递归构造左子树的后根遍历build(n-p-1 , s1+p+1 , s2+p+1 , s+p);//递归构造右子树的后根遍历s[n-1] = s1[0];//把根结点添加到最后}

主程序部分代码:

while(scanf("%s%s" , s1 , s2) == 2){int n = strlen(s1);build(n , s1 , s2 , ans);ans[n] = '\0';printf("%s\n",ans);}

还有一种常见的方法:先构造出二叉树,然后后根遍历,方法参见http://www.cnblogs.com/DiaoCow/archive/2010/04/17/1714273.html

原创粉丝点击