Skip to content

Commit fe149b4

Browse files
committed
Create Binary_Tree_Postorder_Traversal.cc
Using Morris traversal algorithm.
1 parent 679bb39 commit fe149b4

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

Binary_Tree_Postorder_Traversal.cc

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
vector<int> postorderTraversal(TreeNode *root) {
13+
// IMPORTANT: Please reset any member data you declared, as
14+
// the same Solution instance will be reused for each test case.
15+
TreeNode *dump = new TreeNode(0);
16+
dump->left = root;
17+
vector<int> ret;
18+
int L, R;
19+
TreeNode *cur = dump, *tmp = NULL, *helper = NULL;
20+
while (cur) {
21+
if (!cur->left) {
22+
cur = cur->right;
23+
} else {
24+
tmp = cur->left;
25+
while (tmp->right != NULL && tmp->right != cur)
26+
tmp = tmp->right;
27+
if (tmp->right != cur) {
28+
tmp->right = cur;
29+
cur = cur->left;
30+
} else {
31+
//print
32+
L = ret.size();
33+
helper = cur->left;
34+
while (helper != cur) {
35+
ret.push_back(helper->val);
36+
helper = helper->right;
37+
}
38+
R = ret.size() - 1;
39+
40+
//reverse
41+
while (L < R) {
42+
swap(ret[L++], ret[R--]);
43+
}
44+
45+
tmp->right = NULL;
46+
cur = cur->right;
47+
}
48+
}
49+
}
50+
delete dump;
51+
return ret;
52+
}
53+
};

0 commit comments

Comments
 (0)