iterative stack O(n) time O(n) space
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
|
class Solution { public: vector<int> inorderTraversal(TreeNode* root) { stack<pair<TreeNode *, bool>> s; s.emplace(root, false); vector<int> res; while (!s.empty()) { auto [n, v] = s.top(); s.pop(); if (!n) continue; if (v) { res.push_back(n->val); } else { s.emplace(n->right, false); s.emplace(n, true); s.emplace(n->left, false); } } return res; } };
|
recursive O(n) time
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int> res; dfs(root, res); return res; }
void dfs(TreeNode *root, vector<int> &res) { if (!root) return; dfs(root->left, res); res.push_back(root->val); dfs(root->right, res); } };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int> res; if (!root) return {}; for (int x : inorderTraversal(root->left)) { res.push_back(x); } res.push_back(root->val); for (int x : inorderTraversal(root->right)) { res.push_back(x); } return res; } };
|