二叉树叶子结点个数计算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算二叉树叶子结点
1.程序设计简介
已知一棵二叉树,求该二叉树中叶子结点的个数。
2.基本要求
(1)设计二叉树的二叉链表为存储结构
(2)设计求叶子结点个数的递归算法
(3)输入:一颗二叉树
(4)输出:二叉树中叶子结点的个数
3.实现提示
(1)存储设计
二叉树采用二叉链表为存储结构
(2)算法设计
求二叉树中叶子结点个数,即求二叉树的所有结点中左、右子树均为空的结点个数之和。可以将此问题转化为遍历问题,在遍历中“访问一个结点”时判断该结点是不是叶子,若是则将计数器累加。
4.源程序
#include
#include
using namespace std;
struct BiNode 行与测试
6.调试感想
非递归算法求叶子结点的个数
#include
#include
using namespace std;
struct node
{
int data;
node *lchild;
node *rchild;
};
node *root=NULL;
void mid(node*root,int key=500)
{
int sum=0;
stack
while(NULL!=root || !())
{
if(NULL!=root)
{
(root);
root=root->lchild;
}
else
{
root=();
// cout<
if(NULL==root->lchild && NULL==root->rchild)
++sum;
();
root=root->rchild;
}
}
cout< } int main() { root=new node; root->data=100; node *a=new node; node *b=new node; node *a1=new node; node *a2=new node; node *b1=new node; node *b2=new node; a->data=200; b->data=300; a1->data=400; a2->data=500; b1->data=600; b2->data=700; root->lchild=a; root->rchild=b; a->lchild=a1; a->rchild=a2; b->lchild=b1; b->rchild=b2; a1->lchild=NULL; a1->rchild=NULL; a2->lchild=NULL; a2->rchild=NULL; b1->lchild=NULL; b1->rchild=NULL; b2->lchild=NULL; b2->rchild=NULL; mid(root); return 0; }