-
Notifications
You must be signed in to change notification settings - Fork 0
/
03 二叉树中序遍历.cpp
75 lines (68 loc) · 1.83 KB
/
03 二叉树中序遍历.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
/* 中序遍历二叉树 */
#include <iostream>
#include <stack>
using namespace std;
struct TreeNode {
char val;
TreeNode *left;
TreeNode *right;
TreeNode(char ch) : val(ch){};
TreeNode(char ch, TreeNode *l, TreeNode *r) : val(ch), left(l), right(r){};
};
void inorder(TreeNode *root) {
if (root == nullptr) {
return;
}
if (root->left) {
inorder(root->left);
}
cout << root->val;
if (root->right) {
inorder(root->right);
}
}
int main() {
// string str("a{b{d,e{g,h{,i}}},c{f}}");
// string str("a{b{c}}");
// string str("a{b{d, e}, c{f, g}}");
string str;
cin >> str;
if (str.length() == 0) {
return -1;
}
TreeNode *root = new TreeNode(str[0]);
stack<TreeNode *> stk;
stk.push(root);
bool isLeft = true;
for (int i = 1; i < str.length(); ++i) {
// cout << "[debug] stk.size() = " << stk.size() << endl;
if (str[i] == '{') {
isLeft = true;
}
else if (str[i] == ',') {
isLeft = false;
}
else if (str[i] == '}') {
// cout << "\tpop node: " << stk.top()->val << endl;
stk.pop();
}
else if (isalpha(str[i])) {
TreeNode *node = new TreeNode(str[i]);
if (isLeft) {
stk.top()->left = node;
// cout << "\tnode: " << stk.top()->val << " has left node: " << node->val << endl;
}
else {
stk.top()->right = node;
// cout << "\tnode: " << stk.top()->val << " has right node: " << node->val << endl;
}
if (str[i + 1] == '{') {
stk.push(node);
// cout << "\tpush node: " << node->val << endl;
}
}
}
inorder(root);
cout << endl;
return 0;
}