题目:计算二叉树中的叶子结点个数
(1)如果二叉树为空,则叶子结点个数为0。
(2)如果二叉树只有根节点,则叶子结点个数为1
(3)左子树叶子结点数+右子树叶子结点数
一、原代码
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef char TElemType; //TElemType 为可定义的数据类型,此设为char类型
//二叉树的二叉链表存储表示
typedef struct BiTNode
{
TElemType data; //结点数据域
struct BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T);
void Copy(BiTree T, BiTree *NewT);
void PreOrderTraverse(BiTree T);
Status BiTreeEmpty(BiTree T);
Status Depth(BiTree T);
Status NodeCount(BiTree T);
Status LeafCount(BiTree T);
// 给出上述函数原型的定义
int main()
{
BiTree tree,new_tree;
CreateBiTree(&tree);
if (!BiTreeEmpty(tree))
{
printf("该树为空树!\n");
exit(ERROR);
}
else
printf("该树为非空树!\n");
Copy(tree,&new_tree);
printf("复制得到的新树的先序序列:\n");
PreOrderTraverse(new_tree);
printf("\n");
printf("新树的深度为:%d\n",Depth(new_tree));
printf("新树的结点个数为:%d\n",NodeCount(new_tree));
printf("新树的叶子结点个数为:%d\n",LeafCount(new_tree));
return ERROR;
}
二、七个函数的代码
void CreateBiTree(BiTree *T) { // 创建二叉树
char ch;
scanf("%c", &ch);
if (ch == '#') {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
if (!*T) exit(OVERFLOW);
(*T)->data = ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
void Copy(BiTree T, BiTree *NewT) { /