1 #include<iostream>
2 #include<queue>
3 #include<vector>
4 #include<stack>
5 using namespace std;
6 struct TreeNode {
7 int val;
8 struct TreeNode *left;
9 struct TreeNode *right;
10 TreeNode(int x) :
11 val(x), left(NULL), right(NULL) {
12 }
13 };
14 void PreOrder(TreeNode *T)//前序遍历
15 {
16 if (!T)
17 return;
18 if (T)
19 {
20 cout << T->val<<endl;
21 PreOrder(T->left);
22 PreOrder(T->right);
23 }
24
25 }
26 void PreOrder(TreeNode *T)//非递归,前序遍历
27 {
28 if (T == NULL)
29 {
30 return;
31 }
32 stack<TreeNode*>s;
33 s.push(T);
34 TreeNode *temp;
35 while (!s.empty())
36 {
37 temp = s.top();
38 cout << temp->val;
39 s.pop();
40 if (temp->left)
41 {
42 s.push(temp->left);
43 }
44 if (temp->right)
45 {
46 s.push(temp->right);
47 }
48 }
49 }
50
51 void InOrder(TreeNode *T)//中序遍历
52 {
53 if (!T)
54 return;
55 InOrder(T->left);
56 cout << T->val;
57 InOrder(T->right);
58 }
59
60 void PostOrder(TreeNode *T)//后序遍历
61 {
62 if (!T)
63 return;
64 PostOrder(T->left);
65 PostOrder(T->right);
66 cout << T->val;
67 }
68 void Levelorder(TreeNode *T)//层析遍历
69 {
70 if (!T)
71 return;
72 TreeNode *temp;
73 queue<TreeNode*>q;
74 q.push(T);
75 while (!q.empty())
76 {
77 temp = q.front();
78 cout << temp->val;
79 if (temp->left)
80 q.push(temp->left);
81 if (temp->right)
82 q.push(temp->right);
83 q.pop();
84 }
85 }
86 void DeepOrder(TreeNode *T)//深度遍历
87 {
88 if (!T)
89 return;
90 TreeNode *temp;
91 stack<TreeNode*>s;
92 s.push(T);
93 while (!s.empty())
94 {
95 temp = s.top();
96 cout << temp->val;
97 s.pop();
98 if (temp->left)
99 s.push(temp->left);
100 if (temp->right)
101 s.push(temp->right);
102 }
103 }