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

如题所述

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###)"<<endl;
CreateBiTree(T);
leafNum=CountLeaf(T);
cout<<"该二叉树中叶子结点数为:"<<leafNum<<endl;
return
0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-08-31
#include
<iostream>
using
namespace
std;static
int
sum=0;template<typename
T>
void
Count(T*
root){
if(root==NULL)
++sum;
else{
Count(root->left);
Count(root->right);
}
}int
main(void){
//test
//cout<<sum<<endl;
//即可
return
0;
}
//这里我没有树的节点定义,所以直接用模板替代了

1.编写递归算法,计算二叉树中叶子结点的数目
cout<<"请输入中序遍历的二叉树序列(#号代表该结点为空):如(ABC##DE#G##F###)"<<endl;CreateBiTree(T);leafNum=CountLeaf(T);cout<<"该二叉树中叶子结点数为:"<<leafNum<<endl;return 0;}

求统计二叉树叶子结点数的递归算法
1、如果它没有子节点,那么它就是叶子节点。2、如果它有子节点,那么它的叶子节点数量 = 左子树叶子节点数量 + 右子树叶子节点数量。算法代码:unsigned int getLeafCount(struct node* node){ if(node == NULL) return 0; if(node->left == NULL && node->right==NULL) return 1;...

编写递归算法,求二叉树的结点个数和叶子数
} 法二:int LeafCount_BiTree(Bitree T)\/\/求二叉树中叶子结点的数目 { if(!T) return 0; \/\/空树没有叶子 else if(!T->lchild&&!T->rchild) return 1; \/\/叶子结点 else return Leaf_Count(T->lchild)+Leaf_Count(T->rchild);\/\/左子树的叶子数加 上右子树的叶子数 }\/\/LeafCount_...

数据结构编程: 统计二叉树中叶子结点的个数。
\/** * 求二叉树中叶子节点的个数 * @author Administrator * *\/public class Question2 {\/** * 通过递归前序遍历获取叶子节点个数 * @param root * @return *\/public int getNumberOfLeavesByPreOrder(BinaryTreeNode root){if(root == null){return 0;}else{if(root.getLeft() == null...

编写一个递归算法,统计并返回以BT为树根指针的二叉树中的叶子结点的个...
当x左右子树为空 f(x)=1;其他 f(x)=f(bt->lchild)+f(bt-rchild)--- int Count(BTreeNode *BT){ int l,r;if(BT==NULL) return 0;else if(BT->Lchild==NULL&&BT->Rchild==NULL) return 1;else { l=Count(BT->Lchild);r=Count(BT->Rchild);return (l+r);} } ...

二叉树叶子结点数算法
(1)进入"递归函数";(2)如果当前结点没有分支,则是空结点,返回值为0;(3)如果当前结点有左右分支,则是"叶子",返回值为1;(4)查看当前结点的左分支,到步骤(1),然后,查看当前结点的右分支,到步骤(1),合计两次返回值,然后,返回该数值.(5)遍历了所有结点后,退出"递归函数",最后的返回值就是总的...

求二叉树中叶子结点的数目
BiTree(Bitree T)\/*求二叉树中叶子结点的数目*\/ { if(!T) return 0; \/*空树没有叶子*\/ else if(!T->lchild&&!T->rchild) return 1; \/*叶子结点*\/ else return Leaf_Count(T->lchild)+Leaf_Count(T->rchild);\/*左子树的叶子数加上右子树的叶子数*\/ }\/*LeafCount_BiTree *\/ ...

这是个求二叉树中叶子结点的数目的算法,可是看不懂……
这是先根遍历再计数的简单递归程序;if (T) 就是不为空树;if(!T->lchild && !T->rchild)i++;这句的含义是: 左右节点都是空,就计数,就是叶子节点计数;POLeafNodeNum(i,T->lchild); \/\/ 遍历左子树 POLeafNodeNum(i,T->rchild); \/\/ 遍历右子树 ...

怎么用C语言写求一棵二叉树的叶子结点个数
只写函数,root是根节点 int LeafCount(node root){ int i;if(root){ i = !((root->lChild ? 1:0) | (root->rChild? 1:0));return i + LeafCount(root->lChild) + LeafCount(root->rChild);} return 0;}

...试设计一个计算二叉树叶子结点树的递归算 法 要求用递归算法啊_百度...
1、首先要定义两个类:结点类和二叉树类。2、二叉树类的组成:建立树的函数、遍历函数、删除函数。求结点数函数。3、采用递归的思想,遇到标识符表示该结点为空,否则开辟空间创建新结点,同时调用递归开辟左结点和右结点。4、前序遍历函数。5、删除函数的思路:如果当前结点不为空,采用递归访问左结点...

相似回答