-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathp2.cpp
More file actions
63 lines (53 loc) · 1.36 KB
/
Copy pathp2.cpp
File metadata and controls
63 lines (53 loc) · 1.36 KB
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
#include "ADTBiTree.cpp"
#include<stack>
template<typename T>
void Traverse(const BiTree<T>& b,const char order[],auto &&worker){
cout<<"Traverse(Order: "<<order<<"): ";
stack<pair<BiNode<T>*,int>>s; s.emplace(b.root,0);
while(s.size()){
auto [x,i]=s.top(); s.pop();
if(i+1<3) s.emplace(x,i+1);
switch(order[i]){
case 'L':
if(x->lchild)
s.emplace(x->lchild,0);
break;
case 'R':
if(x->rchild)
s.emplace(x->rchild,0);
break;
case 'r':
worker(x->data);
break;
default:
cerr<<"invaild order!";
exit(-1);
}
}
cout<<endl;
}
int main(){
BiTree<char> b;
b.create(cin);
cout<<"b is created by in2.txt"<<endl<<endl;
auto print=[](auto e){cout<<e<<" ";};
cout<<"PreOrderTraverse(recursion): ";
b.preOrderTraverse(print);
cout<<endl;
Traverse(b,"rLR",print);
cout<<endl;
cout<<"InOrderTraverse(recursion): ";
b.inOrderTraverse(print);
cout<<endl;
Traverse(b,"LrR",print);
cout<<endl;
cout<<"PostOrderTraverse(recursion): ";
b.postOrderTraverse(print);
cout<<endl;
Traverse(b,"LRr",print);
cout<<endl;
cout<<"LevelOrderTraverse(b): ";
b.levelOrderTraverse(print);
cout<<endl;
return 0;
}