1 #include <stdio.h>
2
3 using namespace std;
4
5 #define MAX 100
6
7 char preOrder[MAX] = {'A','B', 'D', 'E', 'G', 'C', 'F'};
8 char inOrder[MAX] = {'D', 'B', 'E', 'G', 'A', 'F', 'C'};
9
10 void getPostOrder(int preLeft, int preRight, int inLeft, int inRight) {
11
12 if(preLeft > preRight || inLeft > inRight) {
13 return ;
14 }
15
16 char root = preOrder[preLeft];
17 int i = inLeft;
18 for( ; i <= inRight; i++) {
19 if(inOrder[i] == root)
20 break;
21 }
22
23 int leftLen = i - inLeft;
24 int rightLen = inRight - i;
25 //递归遍历左子树
26 if(leftLen > 0)
27 getPostOrder(preLeft+1, preLeft + leftLen, inLeft, i-1);
28 //递归遍历右子树
29 if(rightLen > 0)
30 getPostOrder(preLeft + leftLen + 1, preRight, i+1, inRight);
31 //最后输出根节点 (PostOrder是左、右、根的顺序)
32 printf("%c\t", preOrder[preLeft]);
33 return ;
34 }
35
36 int main() {
37 getPostOrder(0, 6, 0, 6);
38 }
代码实现 由二叉树的先序遍历和中序遍历推出后序遍历
最新推荐文章于 2022-06-23 21:41:51 发布