给出二叉树先序,中序遍历,求后序遍历

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 const int maxn = 100;
 5 
 6 int n;
 7 char a[maxn], b[maxn];
 8 
 9 void dfs(int la, int ra, int lb, int rb) {
10     if (la > ra)
11         return;
12     int md;
13     for (md = la; a[md] != b[lb]; md ++);
14     dfs(la, md - 1, lb + 1, lb + md - la);
15     dfs(md + 1, ra, lb + md - la + 1, rb);
16     putchar(b[lb]);
17 }
18 
19 int main() {
20     scanf("%s", b + 1);
21     scanf("%s", a + 1);
22     n = strlen(a + 1);
23     dfs(1, n, 1, n);
24     putchar(10);
25 }
代码君

方法提要:
a. 先由先序序列求得根结点;
b. 再由根结点在中序序列中
的位置,知:它之前访问的
结点为其左子树结点,它之
后访问的为其右子树结点;
c. 递归应用a. b. 两条。      

posted @ 2014-12-12 13:27  UsedRose  阅读(396)  评论(0编辑  收藏  举报