【PTA刷题+代码+详解】求二叉树度为1的结点个数(递归法)

news2024/10/6 20:35:31

文章目录

    • 题目
    • C代码
    • 详解

题目

在二叉树T中,其度为1的结点是指某结点只有左孩子或只有右孩子。利用递归方法求二叉树T的度为1的结点个数。
1)如果T=NULL,则是空树,度为1的结点个数为0,返回值为0;
2)如果T->lchild=NULL或T->rchild=NULL(注意:左右孩子同时为NULL时,则是叶子结点,而不是度为1的结点),则是度为1的结点,返回值为1;
3)利用递归方法求其左右子树中的度为1的结点个数;并输出二叉树T的度为1的结点个数。

函数接口定义

在这里描述函数接口。例如:
int DegreeOne(BiTree T);

裁判测试程序样例

裁判测试程序样例如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    char data;
    struct node *lchild;
    struct node *rchild;
}BiNode, *BiTree;

// 先序建立二叉树 (输入时,按先序次序输入二叉树中结点的值,以 # 字符表示空树)
BiTree createBiTree()
{
    BiTree T;
    char c;
    scanf("%c", &c);
    if (c == '#')
        T = NULL;
    else
    {
        T = (BiTree)malloc(sizeof(BiNode));
        T->data = c;
        T->lchild = createBiTree();//先序创建左子树
        T->rchild = createBiTree();//先序创建右子树
    }

    return T;
}

// 递归方法求二叉树中,度为1的结点个数
/* 请在这里填写答案 */

int main( ) {

    BiTree T = createBiTree(); // 建立二叉树
    printf("%d\n",DegreeOne(T));
    return 0;
}

输入样例1:

在这里给出一组输入。例如:

#

输出样例1:

在这里给出相应的输出。例如:

0

输入样例2:

在这里给出一组输入。例如:

ab###

输出样例2:

在这里给出相应的输出。例如:

1

输入样例3:

在这里给出一组输入。例如:

abc##de#g##f###

输出样例3:

在这里给出相应的输出。例如:

2

C代码

 int DegreeOne(BiTree T){
    if(T==NULL){
        return 0;
    }
    if(T->lchild != NULL &&T->rchild != NULL){//某结点有左右子树
        return DegreeOne(T->lchild)+DegreeOne(T->rchild);
    }
    else if(T->lchild != NULL && T->rchild == NULL){//某结点只有左子树
        return 1+DegreeOne(T->lchild);
    }
    else if(T->lchild == NULL && T->rchild != NULL){//某结点只有右子树
        return 1+DegreeOne(T->rchild);
    }
    return 0;
}

详解

这个问题要求使用递归方法求二叉树中度为1的结点个数。度为1的结点是指某结点只有左孩子或只有右孩子。

首先,让我们来看看提供的C代码:

int DegreeOne(BiTree T){
    if(T==NULL){
        return 0;
    }
    if(T->lchild != NULL && T->rchild != NULL){ // 某结点有左右子树
        return DegreeOne(T->lchild) + DegreeOne(T->rchild);
    }
    else if(T->lchild != NULL && T->rchild == NULL){ // 某结点只有左子树
        return 1 + DegreeOne(T->lchild);
    }
    else if(T->lchild == NULL && T->rchild != NULL){ // 某结点只有右子树
        return 1 + DegreeOne(T->rchild);
    }
    return 0;
}

现在让我们一步步解释这段代码:

  1. 递归终止条件:
  • 如果传入的二叉树结点 T 为 NULL,说明是空树,度为1的结点个数为0,返回值为0。
  1. 递归调用:
  • 如果某结点 T 有左右子树,说明这是一个度为2的结点,递归调用 DegreeOne 函数分别计算其左右子树中度为1的结点个数,并将它们相加。
  1. 度为1的结点情况:
  • 如果某结点 T 只有左子树而没有右子树,说明这是一个度为1的结点。递归调用 DegreeOne 函数计算其左子树中度为1的结点个数,并在结果上加1。

  • 如果某结点 T 只有右子树而没有左子树,同样说明这是一个度为1的结点。递归调用 DegreeOne 函数计算其右子树中度为1的结点个数,并在结果上加1。

  1. 返回结果:
  • 返回递归调用的结果,即度为1的结点个数。

现在我们来分析一下,以输入样例为例:

abc##de#g##f###

对应的二叉树结构如下:

image-20231213003222056

通过计算,可以得到度为1的结点个数为2。这是因为结点 e 和结点 f 是度为1的结点。函数 DegreeOne 在这个例子中应该返回 2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1305998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GEE:重分类

作者:CSDN @ _养乐多_ 本文记录了在 Google Earth Engine(GEE)平台上对一副类别图像进行重分类的代码。并以 COPERNICUS/Landcover/100m/Proba-V-C3/Global 数据集中的土地利用数据为例。 结果如下图所示, 文章目录 一、核心函数二、示例代码三、代码链接一、核心函数 核…

保姆级:Windows Server 2012上安装.NET Framework 3.5

目录 一.问题所在无法在安装SQL server2008&#xff08;2012&#xff09; 1.无法安装一下功能 .NET Framework 3.5 二.解决措施 1、打开服务器管理器 2、添加角色和功能 3、选择安装功能 4、指定备用源路径 5、配置本地文件路径 一.问题所在无法在安装SQL server2008&…

【启扬方案】启扬储能管理平板助力储能电站实现智能且高效化运行

在储能领域&#xff0c;储能电站扮演着重要角色&#xff0c;储能电站技术的应用贯穿于电力系统发电、输电、配电、用电的各个环节。实现电力系统削峰填谷、可再生能源发电波动平滑与跟踪计划处理、高效系统调频&#xff0c;增加供电的可靠性。 但随着储能电⼒系统建设发展得越来…

单片机——通信协议(FPGA+c语言应用之iic篇)

一.I2C的功能特点 &#xff08;1&#xff09;功能包括&#xff1a; 1.只需要两条总线&#xff1b; 2.没有严格的波特率要求&#xff0c;例如使用RS232&#xff0c;主设备生成总线时钟&#xff1b; 3.所有组件之间都存在简单的主/从关系&#xff0c;连接到总线的每个设备均可通…

使用Microsoft Dynamics AX 2012 - 9. 核心设置和基本功能

企业的组织结构决定了ERP系统的设置。因此&#xff0c;在开始使用Dynamics AX之前&#xff0c;需要有一个实施项目来设置企业组织和其他核心参数。 实例是Dynamics AX的独立安装&#xff0c;它包含自己的数据库和应用程序。因此&#xff0c;在一个实例中修改配置设置和可编程对…

【Netty的线程模型】

Netty的线程模型 Netty的线程模型知识拓展单Reactor单线程模型单Reactor多线程模型主从Reactor模型 Netty的线程模型 Netty通过Reactor模型基于多路复用器接收并处理用户请求的&#xff0c;多路复用IO模型参考&#xff1a; 多路复用IO模型: 操作系统的IO模型有哪些&#xff1f…

探索SSL证书的应用场景,远不止网站,还有小程序、App Store等

说到SSL证书&#xff0c;我们都知道其是用于实现HTTPS加密保障数据安全的重要工具&#xff0c;在建设网站的时候经常会部署SSL证书。但实际上&#xff0c;SSL证书的应用场景远不止网站&#xff0c;它还被广泛地应用到小程序、App Store、抖音广告、邮件服务器以及各种物联网设备…

解决 Photoshop 中的“暂存盘已满”错误

问题&#xff1a;“暂存盘已满”错误 解决方案 注意: 建议在使用 Photoshop 时&#xff0c;操作系统硬盘上具有 50 GB 的可用空间。根据您正在处理的文件类型&#xff0c;可能需要额外的可用空间。 CtrlK打开首选项【暂存盘】-【D盘】优化 Photoshop 的使用空间 禁用自动恢复存…

【JVM从入门到实战】(四)类的生命周期

什么是类的生命周期 类的生命周期描述了一个类加载、连接、初始化、使用、卸载的整个过程 一个类完整的生命周期如下&#xff1a; 加载阶段 加载阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。 程序员可以使用Java代码拓展的不同的渠道…

C语言—每日选择题—Day45

第一题 1. 以下选项中&#xff0c;对基本类型相同的指针变量不能进行运算的运算符是&#xff08;&#xff09; A&#xff1a; B&#xff1a;- C&#xff1a; D&#xff1a; 答案及解析 A A&#xff1a;错误&#xff0c;指针不可以相加&#xff0c;因为指针相加可能发生越界&…

二百一十六、Flume——Flume拓扑结构之负载均衡和故障转移的开发案例(亲测,附截图)

一、目的 对于Flume的负载均衡和故障转移拓扑结构&#xff0c;进行一个开发测试 二、负载均衡和故障转移 &#xff08;一&#xff09;结构含义 Flume支持使用将多个sink逻辑上分到一个sink组 &#xff08;二&#xff09;结构特征 sink组配合不同的SinkProcessor可以实现负…

Etcd实战(二)-k8s集群中Etcd数据存储

1 介绍 k8s中所有对象的manifest都需要保存到某个地方&#xff0c;这样他们的manifest在api server重启和失败的时候才不会丢失&#xff0c;因此引入了etcd。在k8s中只有api server和etcd直接交互&#xff0c;其它组件都通过api server间接和etcd交互&#xff0c;这样做的好处…

智能优化算法应用:基于引力搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于引力搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于引力搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.引力搜索算法4.实验参数设定5.算法结果6.…

计网 - LVS 是如何直接基于 IP 层进行负载平衡调度

文章目录 模型LVS的工作机制初探LVS的负载均衡机制初探 模型 大致来说&#xff0c;可以这么理解&#xff08;只是帮助我们理解&#xff0c;实际上肯定会有点出入&#xff09;&#xff0c;对于我们的 PC 机来说&#xff0c;物理层可以看成网卡&#xff0c;数据链路层可以看成网卡…

AI日报:苹果为使用Mac的人工智能开发者推出开源工具

文章目录 总览主要介绍开发理念开发细节MLX功能用途 MLX可以用于商业软件吗&#xff1f; 总览 苹果正在为开发人员提供新的工具&#xff0c;用于在其硬件上训练和运行大型语言模型。 主要介绍 开发理念 苹果公司通过发布一系列新的开源人工智能工具&#xff0c;向开源人工智能…

QT QIFW Windows下制作安装包(一)

一、概述 1、QIFW是一款基于QT框架开发的跨平台安装框架。QIFW是QT Installer FrameWork的缩写&#xff0c;支持Windows、Linux和macos等多种平台。QIFW可以帮助开发者创建自己的安装程序&#xff0c;将它们打包到通用的安装包中&#xff0c;并提供可视化的界面进行安装。 2…

部署Kubernetes(k8s)集群,可视化部署kuboard

所需机器 主机名地址角色配置k8s-master192.168.231.134主节点2核4G,centos7k8s-node1192.168.231.135工作节点2核4G,centos7k8s-node2192.168.231.136工作节点2核4G,centos7 主节点CPU核数必须是 ≥2核且内存要求必须≥2G&#xff0c;否则k8s无法启动 1. 集群环境部署【三台…

【css】css实现文字两端对齐效果:

文章目录 一、方法1&#xff1a;二、方法2&#xff1a;三、注意&#xff1a; 一、方法1&#xff1a; 给元素设置 text-align: justify;text-align-last: justify;并且加上text-justify: distribute-all-line; 目的是兼容ie浏览器 p{width: 130px;text-align: justify;text-alig…

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(一)

目录 前言引言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境 相关其它博客工程源代码下载其它资料下载 前言 博主前段时间发布了一篇有关方言识别和分类模型训练的博客&#xff0c;在读者的反馈中发现许多小伙伴对方言…

【前端】CSS定位(学习笔记)

一、定位 1、为什么需要定位 某个元素可以自由的在一个盒子内移动位置&#xff0c;并且压住其他盒子当我们滚动窗口的时候&#xff0c;盒子是固定屏幕某个位置的 浮动可以让多个块级盒子一行没有缝隙排列显示&#xff0c; 经常用于横向排列盒子。 定位则是可以让盒子自由的在…