二叉树基本操作补充(求二叉树中度为0/度为1/度为2的结点个数)

这篇博客探讨如何利用先序遍历递归算法计算二叉树中度为0、1和2的节点个数。通过理解节点的度(即节点孩子的数量),可以对现有遍历算法进行调整,实现所需功能。
摘要由CSDN通过智能技术生成

        在掌握了二叉树的先序遍历递归算法、中序遍历递归算法和后序遍历递归算法的实现流程后,我们稍微开拓一下视野,来看一下该如何求出二叉树中度为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* &
  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
二叉树中度为1的节点个数,可以通过遍历二叉树的方式来实现。以下是一个示例的C语言代码: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树结点结构体 typedef struct TreeNode { int data; struct TreeNode* left; struct TreeNode* right; } TreeNode; // 创建一个新的二叉树结点 TreeNode* createNode(int value) { TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode)); newNode->data = value; newNode->left = NULL; newNode->right = NULL; return newNode; } // 递归方式遍历二叉树,统计度为1的结点个数 int countNodesWithDegreeOne(TreeNode* root) { if (root == NULL) { return 0; } int count = 0; // 当前结点度为1,判断左子树和右子树是否为空 if ((root->left == NULL && root->right != NULL) || (root->left != NULL && root->right == NULL)) { count++; } // 递归遍历左子树和右子树 count += countNodesWithDegreeOne(root->left); count += countNodesWithDegreeOne(root->right); return count; } int main() { // 创建一个示例二叉树 TreeNode* root = createNode(1); root->left = createNode(2); root->right = createNode(3); root->left->left = createNode(4); root->left->right = createNode(5); root->right->left = createNode(6); // 统计度为1的结点个数 int count = countNodesWithDegreeOne(root); printf("度为1的结点个数为:%d\n", count); return 0; } ``` 在上面的示例代码中,我们使用了递归的方式遍历二叉树,并在遍历过程中统计度为1的结点个数。对于每个结点,我们检查其左子树和右子树是否为空,如果其中一个为空而另一个不为空,则该结点度为1。最后返回统计的个数作为结果。在主函中,我们创建了一个示例二叉树,并输出度为1的结点个数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好梦成真Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值