以二叉链表为存储结构, 试编写计算二叉树中叶子结点数目的递归算法.

来源:互联网 发布:淘宝互动平台是什么 编辑:程序博客网 时间:2024/04/26 03:20

原题:以二叉链表为存储结构, 试编写计算二叉树中叶子结点数目的递归算法.(该算法由下面程序中的LeafCount()函数实现)

#include<iostream>#include<time.h>#define ElemType char#define NodeNum 5using namespace std;//二叉树的双链表存储结构typedef struct BiTNode{ElemType data;//数据域struct BiTNode *lchild, *rchild;//左右孩子指针}BiTNode, *BiTree;void CreateTree(BiTree &root){//建立二叉树int i=1, flag;BiTree node, pre, p;srand((unsigned)time(NULL));while(i++ <= NodeNum){node = new BiTNode;node->lchild = NULL;node->rchild = NULL;if(NULL == root){root = node;}else{p = pre = root;/*现在从树根出发, 走到指定树叶结点, 然后在树叶结点上插入新结点, 输入 0 表示向左走, 输入其它字符表示向右走*/cout<<"(向左向右?)请输入:"<<endl;while(NULL != p){cin>>flag;pre = p;if(0 == flag){//向左走p = p->lchild;}else{//向右走p = p->rchild;}}/*将新结点插入为当前叶结点的左孩子(输入 0 )或右孩子(输入其它字符):*/cout<<"选择插入方向:";cin>>flag;if(0 == flag){pre->lchild = node;}else{pre->rchild = node;}}//输入当前结点数据域值cout<<"输入当前结点数据域值:";cin>>node->data;cout<<endl;}}long LeafCount(BiTree root)//计算二叉树中叶子结点数目的递归算法{if(NULL == root){return 0;//树为空时返回 0}else if(NULL == root->lchild && NULL == root->rchild){return 1;//只有一个结点的树返回 1}else{//返回左右子树的叶子结点之和return LeafCount(root->lchild) + LeafCount(root->rchild);}}void main(){BiTree root = NULL;CreateTree(root);cout<<endl<<endl;long count = LeafCount(root);cout<<"此二叉树的叶子结点数为: "<<count;cout<<endl<<endl;}