中部培训网 > 培训新闻 > 电脑 > 软件开发 > > c++ - 正文

2012年软考程序员算法实例:二叉树的中序输出问题

2012-03-27 18:31:05

这个程序的思路是自己输入数字,在输入的同时,已经帮你左右顺序排好了,即左子树的数字比右子树小,是个顺序二叉树,以输入0为结素,而后一中序遍历输出,但不知道为什么,在屏幕上打引的却是左子树最小的数字,而且一直输出,请看下面程序:

#include

#include

typedef struct no

{

int key;

struct no *left,*right;

}node,*PNOD;

void inster(PNOD *p,int k)

{

PNOD ppre,pre,temp;

ppre=*p;

printf(“current number ppre % d”,ppre->key);

if(ppre==NULL)

{

ppre=(node *)malloc(sizeof(node));

ppre->key=k;

ppre->left=NULL;

ppre->right=NULL;

*p=ppre;

return;

}

while(ppre)

{

if(k < ppre->key)

{

temp=ppre;

ppre=ppre->left;

printf(“left ”);

}

else if(k == ppre->key)

{

printf(“has … ”);

return;

}

else if(k > ppre->key)

{

temp=ppre;

ppre=ppre->right;

printf(“right ”);

}

/*printf(“aaaaaaaaaaaaaaaaaa”);*/

}

pre=(node *)malloc(sizeof(node));

pre->key=k;

pre->left=NULL;

pre->right=NULL;

if(temp->key > k)

{

temp->left=pre;

}

else

{

temp->right=pre;

}

}

PNOD creat

{

PNOD T=NULL;

int k;

printf(“please input number =”);

scanf(“%d”,&k);

while(k)

{

inster(&T,k);

printf(“ again =”);

scanf(“%d”,&k);

}

return T;

}

void found(PNOD t)

{

PNOD pp;

pp=t;

while(pp)

{

printf(“pp->key=%d pp->left=%d pp->right=%d”,pp->key,pp->left->key,pp->right->key);

printf(“ ”);

found(pp->left);

printf(“]”,pp->key);

/*printf(“pp->left=%d and pp=%d”,pp->left,pp);*/

getchar;

found(pp->right);

}

}

main

{

PNOD T=NULL;

printf(“*************** ”);

T=creat;

found(T);

}

相关新闻