求二叉树叶子结点数

来源:互联网 发布:学通网络ps序列号 编辑:程序博客网 时间:2024/04/27 20:01
#include<stdio.h>
#include<stdlib.h>
typedef struct TNode{//二叉树结构
 char data;//结点的值
 TNode *lchild;//左子树
 TNode *rchild;//右子树
}*BiTree;
void CreateBiTree(BiTree &T)//中序遍历方式创建二叉树,输入#代表该结点为空
{
 char ch;
 ch=getchar();
 if(ch=='#')
  T=NULL;
 else//结点非空
 {
  T=new TNode;
  T->data=ch;
  CreateBiTree(T->lchild);
  CreateBiTree(T->rchild);
 }
}
int CountLeaf(BiTree T)
{
 static int LeafNum=0;//叶子初始数目为0,使用静态变量
 if(T)
 {
  if((!T->lchild)&&(!T->rchild))//为叶子结点
   LeafNum++;//叶子数目加1
  else //不为叶子结点
  {
   CountLeaf(T->lchild);//递归统计左子树叶子数目
   CountLeaf(T->rchild);//递归统计右子树叶子数目
  }
 }
 return LeafNum;
}
int main()
{
 BiTree T;
 int leafNum;
 printf("请输入中序遍历的二叉树序列(#号代表该结点为空):如(ABC##DE#G##F###)\n");
 CreateBiTree(T);
 leafNum=CountLeaf(T);
 printf("该二叉树的叶子结点数是:%d\n",leafNum);
 return 0;
}
原创粉丝点击