二叉树中序遍历非递归算法

#include<iostream>

using namespace std;

typedef char ElemType;

//二叉树结点的定义
typedef struct BiTreeNode{
  ElemType value;
  BiTreeNode *lChild,*rChild;
}BiTreeNode,*BiTree;

//栈结点的定义
typedef struct StNode{
  BiTree elem;
  StNode *link;
}StNode;

//创建二叉树
void CreateBiTree(BiTreeNode *&root)
{
  char data;
  cout<<"输入结点的值 以#结束\n";
  cin>>data;
  if(data!='#')
  {
     BiTreeNode *newNode=(BiTreeNode *)malloc(sizeof(BiTreeNode));
     newNode->value=data;
     root=newNode;
     CreateBiTree(newNode->lChild);
     CreateBiTree(newNode->rChild);
  }
  else
  {
     root=NULL;
  }
}

//访问结点
void visit(BiTreeNode *node)
{
  cout<<node->value<<"\n";
}

//非递归中序遍历二叉树
void InOrder(BiTree root)
{
  StNode *stackTop=NULL;
  BiTreeNode *ptr=root;
  StNode *q=NULL;
  while(ptr!=NULL||stackTop!=NULL)
  {  
    //ptr结点的最左下的结点
    while(ptr!=NULL)
    {
      q=(StNode*)malloc(sizeof(StNode));
      if(q==NULL)return;
      q->elem=ptr;
      q->link=stackTop;
      stackTop=q;
      ptr=ptr->lChild;
    }
    q=stackTop;
    stackTop=q->link;
    visit(q->elem);
    ptr=q->elem->rChild;
    free(q);
  }
}

int main()
{
  BiTree root=NULL;
  CreateBiTree(root);
  InOrder(root);
  return 0;
}
 

你可能感兴趣的:(算法)