Inorder Tree Traversal without Recursion
Reference
Time Complexity: O(n2)
Using Stack
is the obvious way to travese tree without recursion.
- create an empty stack S
- Initialize current node as root
- Push the current node to S and set current = current->left until current is NULL
- If current is NULL and stack is not empty then
- Pop the top item from stack
- Print the popped item, set current = popped_item->right
- Go to step 3.
- If current is NULL and stack is empty
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 31 32 33 34 35 36 37 38 39
| #include<bits/stdc++.h> using namespace std;
struct Node{ int data; struct Node* left; struct Node* right; Node(int data){ this->data = data; left = right = null; } };
void inOrder(struct Node* root){ stack<Node*> s; Node* curr = root; while(curr!= NULL || s.empty()==false){ while(curr!= NULL){ s.push(curr); curr = curr->left; } curr = s.top(); s.pop(); cout<<curr->data<<" "; curr = curr->right; } }
int main(){ struct 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);
inOrder(root); return 0; }
|