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

这个怎么弄

第1个回答  2017-08-16
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;
}本回答被提问者和网友采纳
第2个回答  2017-08-16
24、秋夕 杜牧

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

编写递归算法,求二叉树的结点个数和叶子数
} 法二: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_...

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

...二叉树的存储表示,试用编写递归算法,统计二叉树中叶子结点的个...
int ret = count(root->leftChild) + count(root->rightChild);return ret == 0 ? 1 : ret;} 第一行: 空指针返回0 第二行:统计左右子树的叶子节点个数 第三行:如果左右子树的叶子节点个数为0,则本身是一个叶子节点,返回1;否则返回左右子树的叶子节点个数。

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

编写一个递归算法,统计并返回以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);} } ...

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

求二叉树中叶子结点的数目
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;}

相似回答