题目:编写递归算法,计算二叉树中叶子结点的数目。
1.需求分析
使用递归的方法,实现二叉树中叶子节点数量的计算。
输入:一颗树的前序遍历,用#代替结束符。
例如,前序遍历:AB#C##D##
输出:二叉树的叶子节点个数。
功能:计算输入的二叉树的叶子节点个数。
2.概要设计
二叉树定义:
数据;
左孩子(或为空,或为二叉树);
右孩子(或为空,或为二叉树);
需要用户把二叉树转化成先序遍历的字符串,用#代替结束符,然后才能使用计算机处理,并且,输出结果仍为字符串。
3.详细设计
//二叉树的节点定义
typedef struct BiTreeNode
{
char data;
struct BiTreeNode *LChild;//左孩子指针
struct BiTreeNode *RChild;//右孩子指针
}BTNode,*BiTree;
//按照前序遍历的顺序创建二叉树
BTNode *CreateTree()
{创建根节点;
创建左子树;
创建右子树}
//按照后序遍历计算叶子节点个数
int leafCount(BiTree T)
{计算左子树的叶子节点;
计算右子树的叶子节点;
If(是叶子节点)
数量+1;}
//主函数调用
int _tmain(int argc, _TCHAR* argv[])
{接收用户输入,创建二叉树;
计算二叉树的叶子节点数}
流程图:
4.调试分析
5.使用说明
1) 运行程序
2) 输入前序遍历二叉树的序列
3) 回车,查看结果
6.测试结果
第一组:一般树
输入:AB#C##D##
输出:
叶子节点:C
叶子节点:D
叶子节点的个数为:2
第二组:单枝树
输入:ABC####
输出:
叶子节点:C
叶子节点的个数为:1
第三组:空树
输入:#
输出:
叶子节点的个数为:0
第四组:满二叉树
输入:ABDH##I##EJ###CF##G##
输出:
叶子节点:H
叶子节点:I
叶子节点:J
叶子节点:F
叶子节点:G
叶子节点的个数为:5
第五组:一般树
输入:ABD#G###CE##F##
输出:
叶子节点:G
叶子节点:E
叶子节点:F
叶子节点的个数为:3
7.附录
源程序文件清单。