非递归中序遍历二叉树

2024-11-16 01:20:45
推荐回答(2个)
回答1:

//以前曾写过,仅供参考,因为这是截取部分源码,
#include "afx.h"
#include "stdio.h"
#include"iostream.h"
#include "iomanip.h"
#include
#include

typedef char ElemType; //定义二叉树结点值的类型为字符型
const int MaxLength=100; //结点个数不超过50个

typedef struct BTNode{
ElemType data;
struct BTNode *lchild,*rchild;
}BTNode,* BiTree;

void PreCreateBiTree(BiTree &T) //按先序次序输入,构造二叉树
{
char ch;
ch=getchar(); //不能用cin来输入,在cin中不能识别空格。
if(ch==' ') T=NULL;
else{
if(!(T=(BTNode *)malloc(sizeof(BTNode)))) cout<<"malloc fail!";
T->data=ch;
PreCreateBiTree(T->lchild);
PreCreateBiTree(T->rchild);
}
}

void NRInOrder(BiTree bt) //非递归的中序遍历算法
{
BiTree stack[MaxLength],p;
int top;
if (bt!=NULL)
{
top=0;
p=bt;
while(p!=NULL||top>0)
{
while(p!=NULL)
{
stack[top]=p;
top++;
p=p->lchild;
}
if (top>0)
{
top--;
p=stack[top];
cout<data<<" ";
p=p->rchild;
}
}
}
}

回答2:

利用栈的中序遍历的二叉树非递归算法

void InOrder(BTree t)
{
PSeqStack S;
Bonde *p=t;
S=Init_SeqStack();
while( p||!Empty_SeqStack( S))
{
if (p)
{
push_SeqStack(S,P);
P=P->lchild;
}
else
{
Pop_SeqStack(S,&p);
visit(p->data);
p=p->rchild;
}
}
}

(最后就是,在你要注意输入到TC环境的时候要记得格式要对哦,还有符号要对哦.因为显示器的问题,现在做说明如下: ;为分号,大小写要分清,因为在C 语言环境中是表示不同的意思的.希望这些能够帮到你.)