#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;
}
二叉树中序遍历非递归算法
最新推荐文章于 2022-07-29 15:37:10 发布
2801

被折叠的 条评论
为什么被折叠?



