当前所在位置:珠峰网资料 >> 计算机 >> 软件水平 >> 正文
2015年软考程序员算法实例:二叉树的中序输出问题
发布时间:2011/3/18 10:50:43 来源:城市学习网 编辑:ziteng
  这个程序的思路是自己输入数字,在输入的同时,已经帮你左右顺序排好了,即左子树的数字比右子树小,是个顺序二叉树,以输入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\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);
  }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15080520号-20
珠峰网 版权所有 All Rights Reserved