理论原理:
代码实现:
#include <iostream>
using namespace std;
struct Binary_Tree_Node
{
char data;
Binary_Tree_Node *lchild;
Binary_Tree_Node *rchild;
Binary_Tree_Node(char data,Binary_Tree_Node *lchild,Binary_Tree_Node *rchild);
};
Binary_Tree_Node::Binary_Tree_Node(char data,Binary_Tree_Node *lchild,Binary_Tree_Node *rchild)
{
this->data=data;
this->lchild=lchild;
this->rchild=rchild;
}
void leafSum(Binary_Tree_Node *root,int &sum)
{
if(root==NULL)
return;
if(root->lchild == NULL && root->rchild == NULL)
sum++;
//求左子树的叶子结点数目
leafSum(root->lchild,sum);
//求右子树的叶子结点数目
leafSum(root->rchild,sum);
}
int main()
{
//创建结点
Binary_Tree_Node nodeA('A',NULL,NULL);
Binary_Tree_Node nodeB('B',NULL,NULL);
Binary_Tree_Node nodeC('C',NULL,NULL);
Binary_Tree_Node nodeD('D',NULL,NULL);
Binary_Tree_Node nodeE('E',NULL,NULL);
Binary_Tree_Node nodeF('F',NULL,NULL);
Binary_Tree_Node nodeG('G',NULL,NULL);
Binary_Tree_Node nodeH('H',NULL,NULL);
//创建树
nodeA.lchild=&nodeB;
nodeA.rchild=&nodeF;
nodeB.rchild=&nodeC;
nodeC.lchild=&nodeD;
nodeC.rchild=&nodeE;
nodeF.rchild=&nodeG;
nodeG.lchild=&nodeH;
//保存叶子结点数目
int sum=0;
leafSum(&nodeA,sum);
cout<<sum<<endl;
return 0;
}
运行结果: