這個(gè)程序的思路是自己輸入數(shù)字,在輸入的同時(shí),已經(jīng)幫你左右順序排好了,即左子樹的數(shù)字比右子樹小,是個(gè)順序二叉樹,以輸入0為結(jié)素,而后一中序遍歷輸出,但不知道為什么,在屏幕上打引的卻是左子樹最小的數(shù)字,而且一直輸出,請(qǐng)看下面程序:
#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(“l(fā)eft\n”);
}
else if(k == ppre->key)
{
printf(“has …\n”);
return;
}
else if(k > ppre->key)
{
temp=ppre;
ppre=ppre->right;
printf(“right\n”);
}
/*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(“\nagain =”);
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(“\n”);
found(pp->left);
printf(“%5d”,pp->key);
/*printf(“pp->left=%d and pp=%d”,pp->left,pp);*/
getchar();
found(pp->right);
}
}
main()
{
PNOD T=NULL;
printf(“***************\n”);
T=creat();
found(T);
}
相關(guān)推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |