1 #include<bits/stdc++.h>
2 using namespace std;
3 const int Max_N;
4
5 //1.树的节点定义
6 struct node{
7 char val;//结点值
8 int lch, rch;//左右儿子(指向结构体数组下标)
9 };
10
11 //2.定义树,用结构体数组存储
12 node tree[Max_N];
13 int id;//数组下标标记
14
15 //3.构建树
16 void build(int root)
17 {
18 char c;
19 cin>>c;
20 tree[root].val=c;
21
22 tree[root].lch=++id;
23 build(tree[root].lch);//或者build(id); 递归进入左子树
24 tree[root].rch=++id;
25 build(tree[root].rch);//或者build(id); 递归进入右子树
26 }
27
28 //4.遍历
29 void xxbl(int root)//4.1 先序遍历
30 {
31 cout<<tree[root].val;//对根进行操作
32
33 if(tree[root].lch)//左子树非空时,递归进入左子树
34 xxbl(tree[root].lch);
35
36 if(tree[root].rch)//右子树非空时,递归进入右子树
37 xxbl(tree[root].rch);
38 }
39 void zxbl(int root)//4.2 中序遍历
40 {
41 if(tree[root].lch)//左子树非空时,递归进入左子树
42 zxbl(tree[root].lch);
43
44 cout<<tree[root].val;//对根进行操作
45
46 if(tree[root].rch)//右子树非空时,递归进入右子树
47 zxbl(tree[root].rch);
48 }
49 void hxbl(int root)//4.3 后序遍历
50 {
51 if(tree[root].lch)//左子树非空时,递归进入左子树
52 hxbl(tree[root].lch);
53
54 if(tree[root].rch)//右子树非空时,递归进入右子树
55 hxbl(tree[root].rch);
56
57 cout<<tree[root].val;//对根进行操作
58 }
59 int main()
60 {
61 build(1);//树根结点从1开始
62 xxbl(1);
63 zxbl(1);
64 hxbl(1);
65
66 return 0;
67 }