二叉木におけるシーケンス遍歴非再帰アルゴリズム
1713 ワード
#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<<" #
";
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<<"
";
}
//
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;
}