/* Non-Recursive Binary Tree Traversal Algorithms These are several algorithms I had trouble with. They are written in standard C++ and use data structures from the STL. The special headers for them are included for convenience. The source was translated to HTML with the excellent open source text editor gvim. */ #include <stack> void preorderTraversal(Node* const v) { if(v != NULL) { stack<Node*> s; Node* tmp = 0; tmp = v; s.push(tmp); while(!s.empty()) { tmp = s.top(); s.pop(); if(tmp != NULL) { visit(tmp); s.push(tmp->right); s.push(tmp->left); } } } } #include <stack> void inorderTraversal(Node* const v) { if(v != NULL) { stack<Node*> s; Node* tmp = 0; tmp = v; while(tmp->left) tmp = tmp->left; s.push(tmp); while(!s.empty()) { tmp = s.top(); s.pop(); visit(tmp); if(tmp->right) { tmp = tmp->right; s.push(tmp); while(tmp->left) tmp = tmp->left; s.push(tmp); } } } } #include <queue> void levelTraversal(Node* const v) { if(v != NULL) { queue<Node*> q; Node* tmp = 0; tmp = v; q.push(tmp); while(!q.empty()) { tmp = q.front(); q.pop(); if(tmp != NULL) { visit(tmp); q.push(tmp->left); q.push(tmp->right); } } } }