二叉树的中序输出问题

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);   }

你可能感兴趣的:(二叉树的中序输出问题)