Skip to content

Commit bca2895

Browse files
committed
2
1 parent f35129c commit bca2895

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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> inorderTraversal(TreeNode *root) {
13+
// Start typing your C/C++ solution below
14+
// DO NOT write int main() function
15+
16+
vector<int> inorder;
17+
stack<TreeNode*> tree_stack;
18+
TreeNode *node = root;
19+
20+
while (node || !tree_stack.empty()) {
21+
while (node) {
22+
tree_stack.push(node);
23+
node = node->left;
24+
}
25+
if (!tree_stack.empty()) {
26+
node = tree_stack.top();
27+
tree_stack.pop();
28+
inorder.push_back(node->val);
29+
node = node->right;
30+
}
31+
}
32+
return inorder;
33+
}
34+
};
35+
36+
// solution 2, O(1) space
37+
class Solution {
38+
public:
39+
vector<int> inorderTraversal(TreeNode *root) {
40+
// Start typing your C/C++ solution below
41+
// DO NOT write int main() function
42+
43+
vector<int> inorder;
44+
TreeNode *current = root;
45+
46+
while (current != NULL) {
47+
if (current->left == NULL) {
48+
inorder.push_back(current->val);
49+
current = current->right;
50+
}
51+
else {
52+
TreeNode *prev = current->left;
53+
while (prev->right && prev->right != current)
54+
prev = prev->right;
55+
if (prev->right == NULL) {
56+
prev->right = current;
57+
current = current->left;
58+
}
59+
else {
60+
inorder.push_back(current->val);
61+
prev->right = NULL;
62+
current = current->right;
63+
}
64+
}
65+
}
66+
return inorder;
67+
}
68+
};

0 commit comments

Comments
 (0)