1 #include<cstdio>
2 #include<iostream>
3 #include<algorithm>
4 #include<cmath>
5 #include<cstring>
6 #include<set>
7 #include<map>
8 #include<queue>
9 #include<vector>
10
11 using namespace std;
12
13 typedef struct node{
14 char data;
15 struct node *left, *right;
16 }node, *BiTree;
17
18 //创建一个二叉树
19 BiTree CreateBiTree(BiTree T){
20 char ch;
21 cin>>ch;
22 if (ch == '#')
23 T = NULL;
24 else {
25 T = new node;
26 if (!T)
27 exit(-1);
28 T->data = ch;
29 T->left = CreateBiTree(T->left);
30 T->right = CreateBiTree(T->right);
31 }
32 return T;
33 }
34
35 //二叉树的先序遍历
36 void PreOrder(BiTree T){
37 if (T){
38 cout<<T->data<<" ";
39 PreOrder(T->left);
40 PreOrder(T->right);
41 }
42 }
43
44 //二叉树的中序遍历
45 void InOrder(BiTree T){
46 if (T){
47 InOrder(T->left);
48 cout<<T->data<<" ";
49 InOrder(T->right);
50 }
51 }
52
53 //二叉树的后序遍历
54 void PostOrder(BiTree T){
55 if (T){
56 PostOrder(T->left);
57 PostOrder(T->right);
58 cout<<T->data<<" ";
59 }
60 }
61
62 //二叉树的层序遍历
63 void bfsOrder(BiTree T){
64 queue<BiTree> q;
65 q.push(T);
66 while(!q.empty()){
67 BiTree t = q.front();
68 cout<<t->data<<" ";
69 q.pop();
70 if (t->left != NULL) q.push(t->left);
71 if (t->right != NULL) q.push(t->right);
72 }
73 }
74
75 int main()
76 {
77 BiTree BTree;
78 BTree = CreateBiTree(BTree);
79 PreOrder(BTree);
80 cout<<endl;
81 InOrder(BTree);
82 cout<<endl;
83 PostOrder(BTree);
84 cout<<endl;
85 bfsOrder(BTree);
86 cout<<endl;
87
88 return 0;
89 }