发布网友 发布时间:2024-08-20 01:08
共2个回答
热心网友 时间:2024-08-24 02:57
void xianxu(Bitree T)
{
if(T)
{
printf("%c",T->Data);
xianxu(T->left);
xianxu(T->right);
}
}
void zhongxu(Bitree T)
{
if(T)
{
zhongxu(T->left);
printf("%c",T->Data);
zhongxu(T->right);
}
}
void houxu(Bitree T)
{
if(T)
{
houxu(T->left);
houxu(T->right);
printf("%c",T->Data);
}
}
void StackInit(SqStack t){
t.top=0;
}
int StackEmpty(SqStack s){
if(s.top==0)
return 1;
else
return 0;
}
void visite(int s)
{
printf("%d ",s);
}
void push( SqStack s, Bitree p){
s.top++;
s.Elem[s.top]=p;
}
Bitree pop(SqStack s){
Bitree p=s.Elem[s.top];
s.top--;
return p;
}
void PreOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
Bitree p=t;
while (p!=NULL || !StackEmpty(s))
{
while (p!=NULL) //遍历左子树
{
visite(p->Data);
push(s,p);
p=p->left;
}//endwhile
if (!StackEmpty(s)) //通过下一次循环中的内嵌while实现右子树遍历
{
p=pop(s);
p=p->right;
}//endif
}//endwhile
}//PreOrderUnrec
//2.中序遍历非递归算法
void InOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
Bitree p=t;
while (p!=NULL || !StackEmpty(s))
{
while (p!=NULL) //遍历左子树
{
push(s,p);
p=p->left;
}//endwhile
if (!StackEmpty(s))
{
p=pop(s);
visite(p->Data); //访问根结点
p=p->right; //通过下一次循环实现右子树遍历
}//endif
}//endwhile
}
你百度一下很多的。。。。。
热心网友 时间:2024-08-24 02:59
函数带1的就是先序遍历
2~中序遍历
3~后续遍历