(PreOder | InOrder | PostOrder Traverse Using Non Recursive Calls) Binary Search Tree In Data Structure Using C++

Data Structure Using C++

Tree Data Structure

Binary Search Tree

(PreOder | InOrder | PostOrder Traverse Using Non Recursive Calls) Binary Search Tree

#include "treeNode.cpp"
#include "StackTemplate.cpp"
void insert(treeNode* root, int info);
void inorder(treeNode* root);
void preorder(treeNode* root);
void postorder(treeNode* root);
int main()
{
 int x[] = { 14, 15, 4, 9, 7, 18, 3, 5, 16,4, 20, 17, 9, 14, 5, -1};
 treeNode *root = new treeNode();
 root->setInfo(x[0]);
 for(int i=1; x[i]>0; i++ )
 {
  insert(root, x[i] );
 } 
 cout<<endl<< "inorder: "<<endl;   
 inorder(root);
 cout<<endl<<"preorder"<<endl;
 preorder(root);
 cout<<endl<<"postorder"<<endl;
 postorder(root);
}
void inorder(treeNode* root)
{
    stack<treeNode* > s; 
    treeNode* p;
    p = root;
    do
    {
        while( p != NULL )
        {
            s.push( p );
            p = p->getLeft();
        }
        // at this point, left tree is empty 
        if( !s.isEmpty() )
  {
        p = s.pop();
        cout << p->getInfo() << " ";
  // go back & traverse right subtree
        p = p->getRight(); 
  }
  } while ( !s.isEmpty() || p != NULL );
}
void preorder(treeNode* root)
{
 stack<treeNode*> s;
 s.push(root);
 while(!s.isEmpty())
 {
  treeNode *p=s.pop();
  cout<<p->getInfo()<<" ";
  
  if(p->getRight())
  {
   s.push(p->getRight());
  }
  if(p->getLeft())
  {
   s.push(p->getLeft());
  }
 }
}
void postorder(treeNode* root)
{
 stack<treeNode*> s;
 s.push(root); 
 stack<int> output;
 while(!s.isEmpty())
 {
  treeNode *p=s.pop();
  output.push(p->getInfo());
  
  if(p->getLeft())
  {
   s.push(p->getLeft());
  }
  if(p->getRight())
  {
   s.push(p->getRight());
  }
 }
 while(!output.isEmpty())
 {
  cout<<output.pop()<<" ";
 }
}

Let me know in the comment section if you have any question.

Previous Post:
(LevelOrder Traverse Using Non Recursive Calls) Binary Search Tree In Data Structure Using C++

Comments