加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

(1)建立一棵二叉树。对此树进行前序遍历、中序遍历及后序遍历,输出遍历序列。

(2012-05-30 12:39:41)
标签:

二叉树

遍历

指针

队列

叶结点

it

#include <stdio.h>
#include <stdlib.h>
#define maxsize 20
typedef int datatype;
typedef struct node{
datatype data;
struct node *lchild,*rchild;       
}bitree;
 int m=0;
//二叉树的建立函数
bitree *creattree()           //建立二叉树,函数返回指向根的指针
{bitree *Q[maxsize];          //队列Q为bitree指针类型的数组
 char ch;
 int front,rear;              //队头队尾指针
 bitree *root,*s;          
 root=NULL;                   //置空二叉树
 front=1;rear=0;              //置空队列
 ch=getchar();                //输入第一个字符
 while(ch!='\n')               //不是结束符的时候重复做
 {
   s=NULL;
   if(ch!='@'               //空格表示虚结点,不是虚结点时建立新的结点
   {
     s=(bitree*)malloc(sizeof(bitree));
     s->data=ch;
     s->lchild=NULL;
     s->rchild=NULL;
   }
  rear++;
  Q[rear]=s;                                    //将虚结点指针NULL或新结点地址入队
  if(rear==0)   root=s;                         //输入第一个结点为根结点
  else
   {if(s&&Q[front])                             //孩子和双亲结点均不是虚结点
       if(rear%2==0) Q[front]->lchild=s;        //rear为偶数,新结点是左孩子
       else
         Q[front]->rchild=s;                    //结点*Q[front]的两个孩子已处理完毕,出队列
    if(rear%2==1)  front++;
   }
  ch=getchar();                                 //输入下一个字符
  }
  return root;                                  //返回头指针
}

//前序遍历二叉树并计算二叉树的叶结点个数
void leaf(bitree *T)
{
  if(T) 
   {
     if(T->lchild==NULL&&T->rchild==NULL)   
       m++;
     leaf(T->lchild);
     leaf(T->rchild);
    }

}
//主函数
void main()
{
 bitree *L;
 printf("建立的二叉树为:\n");
 L=creattree();
 leaf(L);
 printf("二叉树叶节点个数为:\n");
 printf("%d",m);
 getchar();
 getchar();
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有