已知一棵二叉树采用二叉链表存放,写依程序,要求统计出二叉树中叶子的个数,并输出二叉树中非终端节点

论坛 期权论坛 期权     
897463635ya   2018-4-26 14:00   3157   1
分享到 :
0 人收藏

1 个回复

正序浏览
2#
286jzzc56  1级新秀 | 2018-4-30 01:55:15 发帖IP地址来自
#include "stdio.h"
#include "malloc.h"
#define ELEMTYPE char
typedef struct BiTNode
{ ELEMTYPE data;
  struct BiTNode *lchild,*rchild;
} BiTNode;
BiTNode *bulid()         /*建树*/
{ BiTNode *q;
  BiTNode *s[20];
int i,j;
char x;
printf("请按顺序输入二叉树的结点以输入0和*号结束\n");
printf("请输入你要输入的为第几个结点i=\n");
scanf("%d",&i);
printf("请输入你要输入该结点的数为x=");
getchar();
scanf("%c",&x);
while(i!=0&&x!='*')
{q=(BiTNode*)malloc(sizeof(BiTNode));
   q->data=x;
   q->rchild=NULL;
   q->lchild=NULL;
   s=q;

   if(i!=1)
   { j=i/2;
       if(i%2==0)
     s[j]->lchild=q;
    else
     s[j]->rchild=q;
   }

   printf("请输入你要输入的为第几个结点x=\n");
   scanf("%d",&i);
   printf("请输入你要输入该结点的数x=");
   getchar();
   scanf("%c",&x);
}
return s[1];
}
void preoder(BiTNode *bt)  /*先序遍历*/
{ if(bt!=NULL)
{
  printf("%c\n",(bt->data));

  preoder(bt->lchild);

  preoder(bt->rchild);
}
}
void InOrder(BiTNode *bt)   /*中序遍历*/
{ if(bt!=NULL)
{  InOrder(bt->lchild);
   printf("%c\n",bt->data);
   InOrder(bt->rchild);
}
}
void postOrder(BiTNode *bt)  /*后序遍历*/
{ if(bt!=NULL)
{ postOrder(bt->lchild);
  postOrder(bt->rchild);
  printf("%c\n",bt->data);
}
}

main()
{ int a;
  BiTNode *bt;
  bt=bulid();
k1: printf("需要先序遍历输出请输入1,中序遍历请输入2,后序遍历请输入3,结束输入0:");
  scanf("%d",&a);
  switch(a)
  {
  case(1): preoder(bt);  goto k1;
  case(2): InOrder(bt);  goto k1;
  case(3): postOrder(bt); goto k1;
  case(0): break;
    }
}

3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP