5月份要考程序员了,好多需要理解掌握的算法,在此一一写出来。
这个程序的思路是自己输入数字,在输入的同时,已经帮你左右顺序排好了,即左子树的数字比右子树小,是个顺序二叉树,以输入0为结素,而后一中序遍历输出,但不知道为什么,在屏幕上打引的却是左子树最小的数字,而且一直输出,请看下面程序:
#include "stdio.h" #include "string.h" 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/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(“]”,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); }