diff --git a/Cpp_Tree_Traversals/recursive_inorder.cpp b/Cpp_Tree_Traversals/recursive_inorder.cpp new file mode 100644 index 0000000..b1e4417 --- /dev/null +++ b/Cpp_Tree_Traversals/recursive_inorder.cpp @@ -0,0 +1,31 @@ + +#include +using namespace std; + +struct Node { + int data; + Node* left; + Node* right; + Node(int val) : data(val), left(nullptr), right(nullptr) {} +}; + +void inorder(Node* root) { + if (!root) return; + inorder(root->left); + cout << root->data << " "; + inorder(root->right); +} + +int main() { + // sample tree + Node* root = new Node(1); + root->left = new Node(2); + root->right = new Node(3); + root->left->left = new Node(4); + root->left->right = new Node(5); + + cout << "Inorder Traversal: "; + inorder(root); + cout << endl; + return 0; +} diff --git a/Cpp_Tree_Traversals/stack_inorder.cpp b/Cpp_Tree_Traversals/stack_inorder.cpp new file mode 100644 index 0000000..91f6b74 --- /dev/null +++ b/Cpp_Tree_Traversals/stack_inorder.cpp @@ -0,0 +1,41 @@ + + +#include +using namespace std; + +struct Node { + int data; + Node* left; + Node* right; + Node(int val): data(val), left(nullptr), right(nullptr) {} +}; + +vector iterative_inorder(Node* root) { + vector res; + stack st; + Node* curr = root; + while (curr || !st.empty()) { + while (curr) { + st.push(curr); + curr = curr->left; + } + curr = st.top(); st.pop(); + res.push_back(curr->data); + curr = curr->right; + } + return res; +} + +int main() { + Node* root = new Node(1); + root->left = new Node(2); + root->right = new Node(3); + root->left->left = new Node(4); + root->left->right = new Node(5); + + auto ans = iterative_inorder(root); + cout << "Iterative Inorder: "; + for (int v : ans) cout << v << " "; + cout << endl; + return 0; +}