File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 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+ };
You can’t perform that action at this time.
0 commit comments