typedef struct node
{
ElemType data;
struct node *lchild;
struct node *rchild;
}BTNode;
void PostOrder(BTNode *b)
{
if(b != NULL)
{
PostOrder(b->lchild);
PostOrder(b->rchild);
printf("%c",b->data);
}
}
void PostOrder1(BTNode *b)
{
BTNode *ST[MaxSize];
BTNode *p = b,*q;
int top = -1;
int flag;
if(b != NULL)
{
do
{
while(p != NULL)
{
top++;
ST[top] = p;
p = p->lchild;
}
q = NULL;
flag = 1;
while(top != -1 && flag == 1)
{
p = ST[top];
if(p->rchild == q )
{
printf("%c ",p->data);
top--;
q=p;
}
else
{
p=p->rchild;
flag = 0;
}
}
}while( top != -1);
printf("\n");
}
}
求各个叶节点到根节点的逆路径
void AllPath(BSTNode *b)
{
BTNode *ST[MaxSize];
BSTNode *p=b,*q;
int flag ,top =-1,i;
if(b!= NULL)
{
do
{
while(p != NULL)
{
top++;
ST[top] = p;
p=p->lchild;
}
q = NULL;
flag = 1;
while(top != -1 && flag == 1)
{
p = ST[top];
if(p->rchild == q)
{
if(p->lchild == NULL && p->rchild == NULL)
{
printf(" %c 到根节点逆路径:",p->data);
for(i=top;i>=0;i--)
printf("%c->",ST[i]->data);
printf("\n");
}
top--;
q=p;
}
else
{
p=p->rchild;
flag = 0;
}
}
}while(top != -1);
printf("\n");
}
}