当前位置:首页 » 编程语言 » c语言二叉树求节点
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言二叉树求节点

发布时间: 2022-01-18 07:52:16

1. 求查找二叉树子叶(结点)个数的C程序

正好我在做这个作业,我刚写完的,调试过的
为了能在叶子节点返回,我们得多添加叶子节点,使所有的叶子节点都为NULL,他们的直为'?'.
运行该程序,输入ABD??EG???CFH??I?J???+回车
输出leavers=4,deep=5
#include <stdio.h>
#include <stdlib.h>
#define NULLKEY '?'
typedef struct btnode
{
char data;
struct btnode *lchild,*rchild;
}btnode,*bitree;
bitree preCreateBitree(bitree &root)
{
char ch;
scanf("%c",&ch);
if(ch==NULLKEY)
{
root=NULL;
return(root);
}
else
{
root=(bitree)malloc(sizeof(btnode));
root->data=ch;
preCreateBitree(root->lchild);
preCreateBitree(root->rchild);
return(root);
}
}

int searchLeaves(bitree root)
{
if(root==NULL)
return(0);
else
{
printf("%c",root->data); //计算叶子数同时,遍历每个结点的值
if(root->lchild==NULL && root->rchild==NULL)
return(1);
else
return(searchLeaves(root->lchild)+searchLeaves(root->rchild));
}
}

int searchDeep(bitree root)
{
int lDeep=0,rDeep=0;

if(root==NULL)
return(0);
else
{
lDeep=searchDeep(root->lchild);
rDeep=searchDeep(root->rchild);
return(1+((lDeep>rDeep)?lDeep:rDeep));
}
}

void main()
{
int leaves,deep;
bitree root;
root=preCreateBitree(root);
leaves=searchLeaves(root);\\二叉树的叶子数
deep=searchDeep(root);\\二叉树的深度
printf("\nleaves=%d,deep=%d",leaves,deep);
}

2. 求二叉树每一层的节点数 c语言实现多谢大神了!给思路也可以,

广度搜索,每次扫到最后一个节点,往队列里添加右子节点时,往队列里加一个-1.每次遇到-1就统计完一层了。

3. 求二叉树每层节点的个数,用C语言实现

Status
HierarchyBiTree(BiTree
T,
Status
(*Visit)(TElemType
e))
{
LinkQueue
*Q;
//
保存当前节点的左右孩子的队列
InitQueue(Q);
//
初始化队列
if
(T
==
NULL)
return
ERROR;
//树为空则返回
p
=
T;
//
临时保存树根T到指针p中
Visit(p->data);
//
访问根节点
if
(p->lchild)
EnQueue(Q,
p->lchild);
//
若存在左孩子,左孩子进队列
if
(p->rchild)
EnQueue(Q,
p->rchild);
//
若存在右孩子,右孩子进队列
while
(!QueueEmpty(Q))
{
//
若队列不空,则层序遍历
DeQueue(Q,
p);
//
出队列
Visit(p->data);
//
访问当前节点
if
(p->lchild)
EnQueue(Q,
p->lchild);
//
若存在左孩子,左孩子进队列
if
(p->rchild)
EnQueue(Q,
p->rchild);
//
若存在右孩子,右孩子进队列
}
DestroyQueue(Q);
//
释放队列空间
return
OK;
}

4. 怎么用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;
}

5. c语言中二叉树叶子结点怎么求

遍历啊,遍历到这个节点没有子节点,那就是叶子节点了

6. c语言二叉树结点

二叉树的重要性质:在任何二叉树中,叶子结点数总比度为2的结点多1。
证明:设n0为二叉树的叶结点数;n1为二叉树中度为1的结点数;n2为二叉树中度为2的结点数,显然n=n0+n1+n2 (1)
由于二叉树中除了根结点外,其余每个结点都有且仅有一个前件。设 b为二叉树的前件个数,n=b+1(2)
所有这些前件同时又为度为1和度为2的结点的后件。因此又有b=n1+2n2 (3)
我们将(3)代入(2)得出n=n1+2n2+1 (4)
比较(1)和(4),得出n0=n2+1,即叶子数比度为2的结点数多1

这是定理哦

7. C语言 二叉树求思路

不用建立二叉树,因为输入数据就已经是一个二叉树了,所以只要递归求深度即可,
depth(c) = min{depth(lc), depth(rc)} + 1
求的时候用数组把depth(c)存下来,避免重复计算(这方法数据结构课上有教吧,动态规划的一种变形)。
把每个depth(c)都算不出,然后求最大值即可(当然如果知道1是根节点,只要算depth(1))

8. 如何才能C语言编程实现求一棵二叉树的结点总数急!!!

用递归啊,除了叶子节点以外,每个节点都有左子树和右子树,只要判断子节点不为空就用递归调用函数统一子树的节点数,例如
f(T)=f(L)+f(R)+1;
节点总数等于左子树的节点数+右子树的节点数+1

9. c语言遍历二叉树,怎么求每个叶节点的高度

遍历的时候带一个变量表示高度,比如你用visit遍历的话就在参数里写个heigth变量,进入子节点的时候让height+1,遇到叶子节点的时候height的值就是其高度

10. 怎么计算C语言的二叉树中的叶子节点数

结点的度是指,该结点的子树的个数,在二叉树中,不存在度大于2的结点。
计算公式:n0=n2+1
n0
是叶子节点的个数
n2
是度为2的结点的个数
n0=n2+1=5+1=6
故二叉树有5个度为2的结点,则该二叉树中的叶子结点数为6。
(10)c语言二叉树求节点扩展阅读
叶子结点是离散数学中的概念。一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称“叶子”。
叶子是指度为0的结点,又称为终端结点。
叶子结点
就是度为0的结点
就是没有子结点的结点。
n0:度为0的结点数,n1:度为1的结点
n2:度为2的结点数。
N是总结点
在二叉树中:
n0=n2+1;
N=n0+n1+n2
参考资料:叶子结点_网络