求助 二叉树非递归先序遍历 老是搞不完整,要么不输出右子树,要么无线循环。
我都搞了一个早上了... 看了很多东西。。可自己写出来的 老是有问题。。找了很多 但找不到。。希望各位大大们。。帮我检查一下。。找一下原因。。就是非递归先序有问题。#include "stdio.h"
#include "malloc.h"
#define MAX 20
typedef struct node
{
int num;
struct node *lchild,*rchild;
};
node* btree() //建立二叉树
{
node *p;
int n;
printf("按先序遍历输入,如果是虚节点,请用0填补:");
scanf_s("%d",&n);
if(n != 0)
{
p = (node*)malloc(sizeof(node));
p->num = n;
p->lchild = btree();
p->rchild = btree();
}
else
p = NULL;
return p;
}
void xxbl(node *p) //先序遍历
{
if(p != NULL)
{
printf("%6d ",p->num);
xxbl(p->lchild);
xxbl(p->rchild);
}
}
void zxbl(node *p) //中序遍历
{
if(p != NULL)
{
zxbl(p->lchild);
printf("%6d ",p->num);
zxbl(p->rchild);
}
}
void hxbl(node *p) //后续遍历
{
if(p != NULL)
{
hxbl(p->lchild);
hxbl(p->rchild);
printf("%6d ",p->num);
}
}
void f_xxbl(node *s) //非递归先序遍历
{
node*b[MAX],*p;
p = s;
int top = 0;
do{
while(p != NULL)
{
printf("%6d ",p->num);
top++;
b[top] = p;
p = p->lchild;
}
if(top > 0)
{
top--;
p = b[top];
p = p->rchild;
}
}while(top == 0);
}
int _tmain(int argc, _TCHAR* argv[])
{
node *root;
root = btree(); //建立二叉树
printf("先序遍历");
xxbl(root); //先序遍历
printf("\n中序遍历");
zxbl(root); //中序遍历
printf("\n后序遍历");
hxbl(root); //后续遍历
printf("\n非递归先序遍历");
f_xxbl(root); //非递归遍历
return 0;
}