编写递归算法,计算二叉树中叶子结点的数目

2025-03-20 21:42:07
推荐回答(2个)
回答1:

using
namespace
std;
typedef
struct
TNode//二叉树结构
{
char
nodeValue;//结点的值
TNode*
left;//左子树
TNode*
right;//右子树
}*BiTree;
void
CreateBiTree(BiTree
&T)//中序遍历方式创建二叉树
,输入#代表该结点为空
{
char
nodeValue;
cin>>
nodeValue;
if(nodeValue!='#')//结点非空
{
T=new
TNode;
T->nodeValue=nodeValue;
CreateBiTree(T->left);
CreateBiTree(T->right);
}
else
T=NULL;
}
int
CountLeaf(BiTree
T)
{
static
int
LeafNum=0;//叶子初始数目为0,使用静态变量
if(T)//树非空
{
if(T->left==NULL&&T->right==NULL)//为叶子结点
LeafNum++;//叶子数目加1
else//不为叶子结点
{
CountLeaf(T->left);//递归统计左子树叶子数目
CountLeaf(T->right);//递归统计右子树叶子数目
}
}
return
LeafNum;
}
//用来测试的main函数,
int
main()
{
BiTree
T;
int
leafNum;
cout<<"请输入中序遍历的二叉树序列(#号代表该结点为空):如(ABC##DE#G##F###)"<CreateBiTree(T);
leafNum=CountLeaf(T);
cout<<"该二叉树中叶子结点数为:"<return
0;
}

回答2:

#include

using
namespace
std;static
int
sum=0;templateT>
void
Count(T*
root){
if(root==NULL)
++sum;
else{
Count(root->left);
Count(root->right);
}
}int
main(void){
//test
//cout<//即可
return
0;
}
//这里我没有树的节点定义,所以直接用模板替代了