Data Structure
1 | // Definition for a binary tree node |
- In-order Traversal (left, root, right)

The output of in-order traversal of this tree is D, B, E, A, F, C, G.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17void inordertraversal(TreeNode* root) {
if (root == NULL) return;
TreeNode* p = root;
stack<TreeNode*> s;
while (!s.empty || p) {
while (p) {
s.push(p);
p = p->left;
}
if (!s.empty()) {
p = s.top();
s.pop();
cout << p->val << " ";
p = p->rchild;
}
}
} - Pre-order Traversal (root, left, right)

The output of pre-order traversal of this tree is A, B, D, E, C, F, G.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17void preordertraversal(TreeNode* root) {
if (root == NULL) return;
TreeNode* p = root;
stack<TreeNode*> s;
while (!s.empty || p) {
while (p) {
cout << p->val << " ";
s.push(p);
p = p->left;
}
if (!s.empty()) {
p = s.top();
s.pop();
p = p->right;
}
}
} - Post-order Traversal (left, right, root)

The output of post-order traversal of this tree is D, E, B, F, G, C, A.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23void postordertraversal(TreeNode* root) {
if (root == NULL) return;
starck<TreeNode*> s;
TreeNode* p = root;
TreeNode* plast = NULL;
while (!s.empty() || p) {
while (p) {
s.push(p);
p = p->left;
}
if (!s.empty()) {
p = s.top();
if (p->right && p->right != plast) {
p = p->right;
} else {
s.pop();
cout << p->val << " ";
plast = p;
p = NULL;
}
}
}
}