用递归重写已有的程序(十二)——求二叉树的叶子结点数目

二叉链表数据结构描述

     typedef struct node

    { 

datatype  data;

        struct node *lchild,*rchild;

     } BinTreeNode;

/*****************************************************

函数功能:用先序遍历递归法求树的叶子结点的数目

函数输入:二叉树根结点

函数输出:无(通过全局量传递叶子结点的数目

屏幕输出:叶子结点值

*******************************************************/

int sum=0;// 通过全局量传递叶子结点的数目

void LeafNum_DLR(BinTreeNode *root)   

{   if ( root!=NULL )  //非空二叉树条件,等效于 if(root)

   {  if(!root->lchild && !root->rchild)  //是叶子结点则统计并打印

      {  

          sum++;         printf("%c  ",root->data);   

      }

      LeafNum_DLR(root->lchild); //递归遍历左子树,直到叶子处

      LeafNum_DLR(root->rchild); //递归遍历右子树,直到叶子处

   }

}

/*****************************************************

函数功能:递归求树的叶子结点的数目

函数输入:根结点地址

函数输出:叶子结点数目

*******************************************************/

int LeafNum(BinTreeNode *root )

{  if (root ==NULL) return(0);

   else if (root ->lchild==NULL && root ->rchild==NULL)

             return(1);

   else return(LeafNum(root->lchild)+LeafNum(root->rchild));

}

/*****************************************************

测试功能:求叶子结点的数目的测试

测试函数:1. 递归求树的叶子结点的数目LeafNum

2.用先序遍历递归法求树的叶子结点的数目LeafNum_DLR

*******************************************************/

int main()

{

   BinTreeNode *RPtr;

   int i;

   RPtr=creatBtree_DLR(RPtr);

   LeafNum_DLR(RPtr);

   printf("LeafNum_DLR:%d\n ",sum);

   i=LeafNum(RPtr);

   printf("LeafNum:%d \n",i);

   return 0;

}

测试样例

输入ABD@F@@@CE@@@

输出

F E

LeafNum_DLR:2

LeafNum:  2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值