-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBinarySearchTree.cpp
110 lines (99 loc) · 2.24 KB
/
BinarySearchTree.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <queue>
using namespace std;
class Node {
public:
int data;
Node * lchild;
Node * rchild;
explicit Node(int data = NULL) : data(data) {
lchild = nullptr;
rchild = nullptr;
}
void preOrder() {
cout << data << " ";
if (lchild) {
lchild -> preOrder();
}
if (rchild) {
rchild -> preOrder();
}
}
void inOrder() {
if (lchild) {
lchild -> inOrder();
}
cout << data << " ";
if (rchild) {
rchild -> inOrder();
}
}
void postOrder() {
if (lchild) {
lchild -> postOrder();
}
if (rchild) {
rchild -> postOrder();
}
cout << data << " ";
}
};
class BiTree {
private:
Node * root;
public:
BiTree() {
root = nullptr;
}
~BiTree() {
delete root;
}
void build_demo() {
root = new Node(1);
root -> lchild = new Node(2);
root -> lchild -> lchild = new Node(4);
root -> lchild -> rchild = new Node(5);
root -> rchild = new Node(3);
root -> rchild -> lchild = new Node(6);
root -> rchild -> rchild = new Node(7);
root -> rchild -> lchild -> lchild = new Node(8);
root -> rchild -> lchild -> rchild = new Node(9);
}
void preOrder() {
root -> preOrder();
cout << endl;
}
void inOrder() {
root -> inOrder();
cout << endl;
}
void postOrder() {
root -> postOrder();
cout << endl;
}
void levelOrder() {
queue<Node*> my_queue;
auto cur_node = new Node();
my_queue.push(root);
while(!my_queue.empty()) {
cur_node = my_queue.front();
my_queue.pop();
cout << cur_node -> data << " " ;
if (cur_node -> lchild) {
my_queue.push(cur_node -> lchild);
}
if (cur_node -> rchild) {
my_queue.push(cur_node -> rchild);
}
}
}
};
int main() {
BiTree biTree;
biTree.build_demo();
biTree.preOrder();
biTree.inOrder();
biTree.postOrder();
biTree.levelOrder();
return 0;
}