题目描述:
//二叉树的二叉链表存储表示
typedef struct Node
{
DataType data;
strct Node * LChild;
struct Node * RChild;
}BiTNode, *BiTree;
请编写递归算法,计算二叉树中所有叶子结点数。
分析:
我们可以采用先序遍历法(根左右)对叶子结点进行计数
先计数根结点,然后通过递归一路向左计数左子树叶子数,左子树叶子计数完毕后,再通过递归一路向右计数。循环交替“根左右”,直至所有叶子数被记录完成。
通过画图观察理解更好理解,可以找一个简单例子自行理顺一遍。
也可采用中序遍历和后序遍历。这里只写用先序遍历的代码和分析。
实现代码:
int count =0; //计录叶子数
int sum(BiTree tree)
{
//循环交替“根左右”,直至所有叶子数被记录完成
while(tree)
{
count++; //先计数根结点
sum(tree->LChild); //一直向左走,直到走到左结点为空
sum(tree->RChild); //一直向右走,直到走到右节点为空
}
printf("%d",count); //打印叶子数
}