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