给出二叉树先序,中序遍历,求后序遍历
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. 两条。