二叉树基本操作补充(求二叉树中度为0/度为1/度为2的结点个数)
程序员文章站
2022-05-16 18:35:17
...
在掌握了二叉树的先序遍历递归算法、中序遍历递归算法和后序遍历递归算法的实现流程后,我们稍微开拓一下视野,来看一下该如何求出二叉树中度为0、度为1和度为2的结点的个数.
在设计算法之前,我们要弄清什么是"结点的度". "结点的度"是指该结点孩子的个数:如果该结点没有孩子,那么该结点的度为0;如果该结点只有左孩子而没有右孩子或只有右孩子而没有左孩子,那么该结点的度为1;如果该结点既有左孩子又有右孩子,那么该结点的度为2.
有了上述概念的铺垫,我们可以使用三种遍历算法中的任意一种作为结构依托,在访问结点时加入和遍历算法不同的操作即可.
下面使用先序遍历递归算法求解二叉树中度为0的结点的个数.
int sum_0=0;//记录二叉树度为0的结点的个数
void NodeCount_0(BiTreeNode* &T)//统计二叉树叶子结点的个数
{
if(T!=NULL)
{
if(T->LChild==NULL&&T->RChild==NULL)//判定结点的度是否为0
{
sum_0++;
}
NodeCount_0(T->LChild);
NodeCount_0(T->RChild);
}
else
{
;
}
}
再使用先序遍历递归算法求解二叉树中度为1的结点的个数.
int sum_1=0;//记录二叉树度为1的结点的个数
void NodeCount_1(BiTreeNode* &T)//统计二叉树度为1的结点的个数
{
if(T!=NULL)
{
if(T->LChild==NULL&&T->RChild!=NULL||T->LChild!=NULL&&T->RChild==NULL)//判定结点的度是否为1
{
sum_1++;
}
NodeCount_1(T->LChild);
NodeCount_1(T->RChild);
}
else
{
;
}
}
最后使用先序遍历递归算法求解二叉树中度为2的结点的个数.
int sum_2=0;//记录二叉树度为2的结点的个数
void NodeCount_2(BiTreeNode* &T)//统计二叉树度为2的结点
{
if(T!=NULL)
{
if(T->LChild!=NULL&&T->RChild!=NULL)//判定结点的度是否为2
{
sum_2++;
}
NodeCount_2(T->LChild);
NodeCount_2(T->RChild);
}
else
{
;
}
}
从上面三个算法的执行流程可以看出,三种二叉树遍历递归算法是实现这里三种算法的基础:只需要将二叉树的先序遍历递归算法稍加修改,即可实现这里的算法.
上一篇: Android常用对话框——Dialog
下一篇: C语言 二叉树 统计二叉树中度为0,1和2的结点个数【树和二叉树】给定先序序列,按照该序列创建对应的二叉树,并输出该二叉树度为0,1和2的结点个数。输入:一行,二叉树按先序遍历序列,空指针用字符^占位
推荐阅读
-
求二叉树度为0,1,2的结点个数
-
SWUST-973 976 975-统计利用先序遍历创建的二叉树的度为0,1,2的结点个数
-
统计二叉树中度为0,1,2的节点个数
-
二叉树基本操作补充(求二叉树中度为0/度为1/度为2的结点个数)
-
C语言 二叉树 统计二叉树中度为0,1和2的结点个数【树和二叉树】给定先序序列,按照该序列创建对应的二叉树,并输出该二叉树度为0,1和2的结点个数。输入:一行,二叉树按先序遍历序列,空指针用字符^占位
-
二叉树:度为2的结点个数、叶子结点的个数、结点的个数
-
数据结构 统计二叉树中度为0,1和2的结点个数
-
统计二叉树中度为1,2的结点个数c++
-
6-1 统计二叉树度为2的结点个数 (10分)(c++)
-
二叉树度数为0,1,2,所对应的结点个数