Fork me on GitHub

Binary Tree Postorder Traversal

Description

https://leetcode.com/problems/binary-tree-postorder-traversal/description/

Solution

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
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Node {
public:
bool l;
bool r;
TreeNode* treeNode;
Node(TreeNode* node) {
this->treeNode = node;
this->l = false;
this->r = false;
}
};

class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> ret;
stack<Node*> s;
Node* start = new Node(root);
if (root == NULL) return ret;
s.push(start);
while (s.empty() == false) {
Node* currentNode = s.top();
if (currentNode->l == false && currentNode->treeNode->left != NULL) {
currentNode->l = true;
TreeNode* traverse = currentNode->treeNode->left;
while(traverse != NULL) {
Node* newNode = new Node(traverse);
newNode->l = true;
s.push(newNode);
traverse = traverse->left;
}
continue;
}
if (currentNode->r == true || currentNode->treeNode->right == NULL) {
s.pop();
ret.push_back(currentNode->treeNode->val);
continue;
}
//Default case, find the node in the right subtree.
currentNode->r = true;
s.push(new Node(currentNode->treeNode->right));
}
return ret;
}
};