1. c语言二叉树的叶子结点数统计
int nodenum(bt *t);
{
int lnum=rnum=0;
if(t->lch != NULL) lnum=nodenum(t->lch);
if(t->rch != NULL) rnum=nodenum(t->lch);
if(t->lch == NULL && t->rch ==NULL) return 1;
return lnum+rnum;
}
2. 数据结构算法设计——统计二叉树叶子结点的个数,并输出结果
代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreatTree(BiTree &A)
{
char ch;
scanf("%c",&ch);
if(ch=='#')
{
A=NULL;
}
else
{
A=new BiTNode;
A->data=ch;
CreatTree(A->lchild);
CreatTree(A->rchild);
}
}
int NodeTree(BiTree A)
{
if(A==NULL)
return 0;
else if(A->lchild==NULL&&A->rchild==NULL)
return 1;
else
return NodeTree(A->lchild)+NodeTree(A->rchild);
}
int main()
{
BiTree A;
int b;
printf("先序法赋值(空用#表示):");
CreatTree(A);
b=NodeTree(A);
printf("共有%d个叶子节点 ",b);
}
(2)c语言中统计二叉树结点数扩展阅读
二叉树的性质
1、对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
2、有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:
若I为结点编号则 如果I>1,则其父结点的编号为I/2;
如果2*I<=N,则其左孩子(即左子树的根结点)的编号为2*I;若2*I>N,则无左孩子;
如果2*I+1<=N,则其右孩子的结点编号为2*I+1;若2*I+1>N,则无右孩子。
3、给定N个结点,能构成h(N)种不同的二叉树。h(N)为卡特兰数的第N项。h(n)=C(2*n,n)/(n+1)。
4、设有i个枝点,I为所有枝点的道路长度总和,J为叶的道路长度总和J=I+2i[2]
3. 怎么计算C语言的二叉树中的叶子节点数
结点的度是指,该结点的子树的个数,在二叉树中,不存在度大于2的结点。
计算公式:n0=n2+1
n0
是叶子节点的个数
n2
是度为2的结点的个数
n0=n2+1=5+1=6
故二叉树有5个度为2的结点,则该二叉树中的叶子结点数为6。
(3)c语言中统计二叉树结点数扩展阅读
叶子结点是离散数学中的概念。一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称“叶子”。
叶子是指度为0的结点,又称为终端结点。
叶子结点
就是度为0的结点
就是没有子结点的结点。
n0:度为0的结点数,n1:度为1的结点
n2:度为2的结点数。
N是总结点
在二叉树中:
n0=n2+1;
N=n0+n1+n2
参考资料:叶子结点_网络
4. C语言一道数据结构算法题,求大神解答,求二叉树的结点数量!
#include<bits/stdc++.h>
usingnamespacestd;
intdeg[233],tot[3],n,m;
intmain(){
scanf("%d",&n);
for(inti=1;i<n;i++){
intt1,t2;
scanf("%d%d",&t1,&t2);
deg[t1]++;deg[t2]++;
}
for(inti=1;i<=n;i++)
tot[deg[i]]++;
printf("%d%d%d ",tot[0],tot[1],tot[2]);
}
5. C语言中统计二叉树节点的数量。
void CreateBiTree(BiTree bt) //创建一个二叉树
{
char ch;
printf("请输入该二叉树节点的字符,.表示结束:");
ch=getchar();
printf("\n");
if(ch=='.') bt=NULL;
else
{
bt=(BiTree)malloc(sizeof(BiTNode));
bt->data=ch;
CreateBiTree((bt->LChild));
CreateBiTree((bt->RChild));
}
这个函数里面
ch = getchar();
后面应该加一个
temp = getchar();
是因为你按得回车同样被当做一个符号被输入进二叉树
6. c语言 统计二叉树的叶节点个数,并输出每个叶节点到根结点的路径
int countTreeNode(TreeNode * root, Queue *queue)
{
if (root == NULL)
return 0;
queue->push(root);//入队
if (root->left == NULL && root->right == NULL)
{
queue->print();//打印队列中的元素
queue->pop();//出队
return 1;
}
int count = countTreeNode(root->left, queue) + countTreeNode(root->right,queue);
queue->pop();//出队
return count;
}
7. 求C语言统计一棵二叉树节点总数的算法(只要函数)
用递归啊,除了叶子节点以外,每个节点都有左子树和右子树,只要判断子节点不为空就用递归调用函数统一子树的节点数,例如
f(t)=f(l)+f(r)+1;
节点总数等于左子树的节点数+右子树的节点数+1
8. c语言中二叉树个数计算方法
在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left
subtree)和“右子树”(right
subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的
i
-1次方个结点;深度为k的二叉树至多有2^(k)
-1个结点;对任何一棵二叉树t,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0
=
n2
+
1。
树是由一个或多个结点组成的有限集合,其中:
⒈必有一个特定的称为根(root)的结点;二叉树
⒉剩下的结点被分成n>=0个互不相交的集合t1、t2、......tn,而且,
这些集合的每一个又都是树。树t1、t2、......tn被称作根的子树(subtree)。
树的递归定义如下:(1)至少有一个结点(称为根)(2)其它是互不相交的子树
1.树的度——也即是宽度,简单地说,就是结点的分支数。以组成该树各结点中最大的度作为该树的度,如上图的树,其度为2;树中度为零的结点称为叶结点或终端结点。树中度不为零的结点称为分枝结点或非终端结点。除根结点外的分枝结点统称为内部结点。
2.树的深度——组成该树各结点的最大层次。
3.森林——指若干棵互不相交的树的集合,如上图,去掉根结点a,其原来的二棵子树t1、t2、t3的集合{t1,t2,t3}就为森林;
4.有序树——指树中同层结点从左到右有次序排列,它们之间的次序不能互换,这样的树称为有序树,否则称为无序树。
9. 编写递归算法,统计二叉树中度为1的节点数目C语言怎么写
int
Degree(BTree
*
t)
{
if(!t)
//根节点为空
return
0;
else
if
(t->lchild
==
NULL
&&
t->rchild
==
NULL)//只有根节点
return
0;
else
if
(t->lchild
!=
NULL
&&
t->rchild
==
NULL)//有左孩子没有右孩子
return
1+
Degree(t->lchild);
else
if
(t->lchild
==
NULL
&&
t->rchild
!=
NULL)//有右孩子没有左孩子
return
1
+
Degree(t->rchild);
else
if
(t->lchild
!=
NULL
&&
t->rchild
!=
NULL)//左右孩子都有
return
Degree(t->lchild)
+
Degree(t->rchild);
}
手打,希望对你有帮助!