#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; }