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); } |
下一篇: 美/加认可澳洲三年制本科