diff --git a/L13_AlltraversalsCpp b/L13_AlltraversalsCpp index 91f8253..3d98e4c 100644 --- a/L13_AlltraversalsCpp +++ b/L13_AlltraversalsCpp @@ -14,48 +14,62 @@ class Solution { public: - vector postorderTraversal(TreeNode* root) { - stack> st; - st.push({root, 1}); - vector pre, in, post; - if(root == NULL) return post; - - while(!st.empty()) { - auto it = st.top(); - st.pop(); - - // this is part of pre - // increment 1 to 2 - // push the left side of the tree - if(it.second == 1) { - pre.push_back(it.first->val); - it.second++; - st.push(it); - - if(it.first->left != NULL) { - st.push({it.first->left, 1}); - } + void traversal(node *root) + { + if (!root) + return; + + vector PreOrder, InOrder, PostOrder; + + stack> S; + + S.push({root, 1}); + + while (!S.empty()) + { + if (S.top().second == 1) + { + PreOrder.push_back(S.top().first->data); + S.top().second++; + + if (S.top().first->left) + S.push({S.top().first->left, 1}); } - // this is a part of in - // increment 2 to 3 - // push right - else if(it.second == 2) { - in.push_back(it.first->val); - it.second++; - st.push(it); - - if(it.first->right != NULL) { - st.push({it.first->right, 1}); - } + else if (S.top().second == 2) + { + InOrder.push_back(S.top().first->data); + S.top().second++; + + if (S.top().first->right) + S.push({S.top().first->right, 1}); } - // don't push it back again - else { - post.push_back(it.first->val); + + else + { + PostOrder.push_back(S.top().first->data); + S.pop(); } - } + } + + cout << "Pre Order : "; + + for (int it : PreOrder) + cout << it << " "; + + cout << "\n"; + + cout << "In Order : "; + + for (int it : InOrder) + cout << it << " "; + + cout << "\n"; + + cout << "Post Order : "; - return post; + for (int it : PostOrder) + cout << it << " "; } };