我们要求利用父指针表示法建立一棵有向树,并分别实现其先、中、后根次序周游。我好混乱啊。。。写的这个只能做3个数字的。。。
可不可以请大家指导一下?刚开始学这个,实在找不到感觉。。。
非常谢谢!麻烦您们了!:-)
#include<stdio.h>
#include<malloc.h>
#define MAXNUM 100
struct ParTreeNode/*树中结点结构*/
{
int info;/*结点中的元素*/
int parent; /*结点的父结点位置*/
};
struct ParTree
{
struct ParTreeNode nodelist[MAXNUM];
int n;
};
typedef struct ParTree *PParTree;
//在父指针表示的树中求最左子结点的位置
int leftChild_partree(PParTree t, int p)
{
if(t->nodelist[p+1].parent==p)
return(p+1);
else
return(-1);
}
//在父指针表示的树中求兄弟结点的位置
int rightSibling_partree(PParTree t, int p)
{
int i;
if (p>=0 && p<t->n)
{
for (i=p+1; i<t->n; i++)
if (t->nodelist[i].parent==t->nodelist[p].parent)
return(i);
}
return(-1);
}
//先根,递归
void preOrder(PParTree t,int p)
{
int c;
printf("%d ",t->nodelist[p].info);
c=leftChild_partree(t,p);
while (c>=0 && c<t->n)
{
preOrder(t,c);
c=rightSibling_partree(t,c);
}
}
//中根,递归
void inOrder(PParTree t,int p)
{
int c;
c=leftChild_partree(t,p);
if (c<=0)
printf("%d ",t->nodelist[p].info);
else
{
inOrder(t,c);
printf("%d ",t->nodelist[p].info);
c=rightSibling_partree(t,c);
while (c>=0 && c<t->n)
{
inOrder(t,c);
c=rightSibling_partree(t,c);
}
}
}
//后根,递归
void postOrder(PParTree t,int p)
{
int c;
c=leftChild_partree(t,p);
while (c>=0 && c<t->n)
{
postOrder(t,c);
c=rightSibling_partree(t,c);
}
printf("%d ",t->nodelist[p].info);
}
void main()
{
PParTree t;
t=(PParTree)malloc(sizeof(struct ParTreeNode));
int i,total,num;
scanf("%d",&total);
t->n=total;
for(i=0;i<total;i++)
{
scanf("%d",&num);
t->nodelist[i].info=num;
}
printf("\nPre-Order:\n");
preOrder(t,0);
printf("\nIn-Order:\n");
inOrder(t,0);
printf("\nPost-Order:\n");
postOrder(t,0);
}
[此贴子已经被作者于2006-4-2 23:16:06编辑过]