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

(3)求二叉树中结点总数。

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

二叉树

指针

队列

根结点

总数

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==1)   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;                                  //返回头指针
}
//求二叉树的节点的总数
int sum(bitree *T)
{ int num1,num2;
  if(T==NULL)
    return 0;
  else if(T->lchild==NULL&&T->rchild==NULL)
    return 1;
  else
  {
   num1=sum(T->lchild);
   num2=sum(T->rchild);
   return (num1+num2+1); 
  }
}

main()
{int m;
 bitree *L;
 printf("建立的二叉树为:\n");
 L=creattree();
 m=sum(L);
 printf("二叉树的结点总数为:\n");
 printf("%d",m);
 getchar();
 getchar();
}

0

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

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

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

新浪公司 版权所有