1,求二叉树叶子结点的个数。
分析思想:
(1)如果这个树为空,则没有节点,结点数为0.
(2)如果这个数只有一个根节点,它的左右子树都为空,则结点数为0.
(3)如果这个数有根节点并且它的左右子树不为空,则节点数等于左子树的结点数加上右子树的结点数。
实现代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
typedef struct Node
{
char data;
struct Node *left;
struct Node *right;
}BiNode,*Bitree;
Bitree createBtree()
{
Bitree T;
char c;
scanf("%s", &c);
if (c == '#')
T = NULL;
else
{
T = new BiNode;
T->data = c;
T->left = createBtree();
T->right = createBtree();
}
return T;
}
void Order(Bitree T)
{
if (T)
{
printf("%c\n", T->data);
Order(T->left);
Order(T->right);
}
}
int leftnum(Bitree T)
{
if (T == NULL)
{
return 0;
}
if (T->left == NULL&&T->right == NULL)
{
return 1;
}
return (leftnum(T->left) + leftnum(T->right));
}
int main(int argc,const char* argv[])
{
Bitree T = createBtree();
Order(T);
int num = leftnum(T);
cout << num << endl;
return 0;
}
2,求第K层结点的个数
size_t GeTkleafNode(Bitree proot,size_t k)
{
if (proot == NULL||k<1)
{
return 0;
}
if (k==1)
{
return 1;
}
return (GeTkleafNode(proot->left, k - 1) + GeTkleafNode(proot->right, k - 1));
}