二叉搜索树的先序中序后序非递归遍历代码

Posted simple_wxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉搜索树的先序中序后序非递归遍历代码相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<stack>
#include<vector>
using namespace std;
struct node
{
  int val;
  node *left,*right;
  node(int _val):val(_val),left(NULL),right(NULL){
   
  } 
};
struct bignode
{

  bool isfirst;
  node* pnode; 
};
void postorder(node* root)
{
 
 stack<bignode*> sta;
 node *p=root;
 while(p!=NULL||!sta.empty())
 {
  while(p)
  {
   bignode *tmp=new bignode();
   tmp->isfirst=true;
   tmp->pnode=p;
   sta.push(tmp);
   p=p->left;
  }
  if(!sta.empty())
  {
   bignode *tmp=sta.top();
   sta.pop();
   if(tmp->isfirst)
   {
    tmp->isfirst=false;
    sta.push(tmp);
    p=tmp->pnode->right;
   }
   else
   {
    cout<<tmp->pnode->val<<" ";
    p=NULL;
   }
  }
 }
}
void preorder(node* root)
{
    stack<node*> sta;
    node* p=root;
    while(p!=NULL||!sta.empty())
    {
     while(p){
  cout<<p->val<<" ";
      sta.push(p);
      p=p->left;
     }
     if(!sta.empty())
     {
      node * tmp=sta.top();
     
      sta.pop();
      p=tmp->right;
     }
     
    }
}
void inorder(node* root)
{
    stack<node*> sta;
    node* p=root;
    while(p!=NULL||!sta.empty())
    {
     while(p){
 
      sta.push(p);
      p=p->left;
     }
     if(!sta.empty())
     {
      node * tmp=sta.top();
      cout<<tmp->val<<" ";
      sta.pop();
      p=tmp->right;
     }
     
    }
}
int main()
{

   node n1(1),n2(2),n3(3),n4(4),n5(5),n6(6);
   n1.left=&n2;
   n1.right=&n3;
   n2.left=&n4;
   n2.right=&n5;
   n3.left=&n6;
   inorder(&n1);
 return 1;
}

 

以上是关于二叉搜索树的先序中序后序非递归遍历代码的主要内容,如果未能解决你的问题,请参考以下文章

二叉树问题:递归方式实现二叉树先序中序后序遍历

算法练习28:非递归方式遍历二叉树的先序中序后序

二叉树遍历的三种方法:先序遍历,中序遍历,后序遍历

二叉树的先序中序后序遍历

二叉树遍历(先序中序后序)

用递归和非递归方式实现二叉树的先序中序后序遍历