Skip to content

Instantly share code, notes, and snippets.

@saswata-dutta
Last active June 7, 2021 20:26
Show Gist options
  • Save saswata-dutta/2a0099dc913b3ce8f6b2167c692aef5d to your computer and use it in GitHub Desktop.
Save saswata-dutta/2a0099dc913b3ce8f6b2167c692aef5d to your computer and use it in GitHub Desktop.
Iterative binary tree traversals
vector<int> inorderTraversal(TreeNode* root) {
unordered_map<TreeNode*, int> count;
stack<TreeNode*> stk;
vector<int> traversal;
stk.push(root);
while(!stk.empty()) {
TreeNode* cur = stk.top();
if(!cur) {
stk.pop();
continue;
}
switch(count[cur]) {
case 0:
stk.push(cur->left);
break;
case 1:
traversal.push_back(cur->val);
break;
case 2:
stk.push(cur->right);
break;
default:
stk.pop();
break;
}
++count[cur];
}
return traversal;
}
vector<int> inorderTraversal(TreeNode* root) {
stack<pair<TreeNode*, int>> stk;
vector<int> traversal;
stk.push({root, 0});
while(!stk.empty()) {
auto [cur, state] = stk.top();
stk.pop();
if(!cur || state > 2) {
continue;
}
stk.push({cur, state + 1});
switch(state) {
case 0:
stk.push({cur->left, 0});
break;
case 1:
traversal.push_back(cur->val);
break;
case 2:
stk.push({cur->right, 0});
break;
}
}
return traversal;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment