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

文章目录

    • 题目
    • 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.mzph.cn/news/217753.shtml

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

相关文章

上海亚商投顾:沪指收复3000点,房地产板块集体走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日窄幅震荡&#xff0c;创业板指走势较弱&#xff0c;科创50指数跌近1%。房地产板块集体走强&#xff0…

深度学习中的各类评价指标

深度学习中的各类评价指标 1 Dice Loss2 Precision&#xff08;精度&#xff09;3 Recall&#xff08;召回率&#xff09;4 F-Score5 mAP 1 Dice Loss Dice Loss&#xff0c;也叫Soft Dice Coefficient&#xff0c;是一种用于图像分割任务的损失函数。它基于目标分割图像与模型…

Apache Flink(十一):Flink集群部署-Standalone集群部署

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 节点划分

设计模式——原型模式(创建型)

引言 原型模式是一种创建型设计模式&#xff0c; 使你能够复制已有对象&#xff0c; 而又无需使代码依赖它们所属的类。 问题 如果你有一个对象&#xff0c; 并希望生成与其完全相同的一个复制品&#xff0c; 你该如何实现呢&#xff1f; 首先&#xff0c; 你必须新建一个属于…

C#基础——语法学习

C#的基本语法 在介绍基本语法之前我们先来大概讲一下创建好的这些文件都是做什么的 .sln文件&#xff1a;将项目和解决方案项结合到一起 .vs文件夹&#xff1a;用来存储当前解决方案中关于用户的设置和自定义项&#xff0c;比如断点&#xff0c;主题等。&#xff08;一般都将其…

飞天使-linux操作的一些技巧与知识点2-TCP的三次握手以及四次挥手以及转换状态

文章目录 TCP 的三次握手四次挥手转换状态 TCP 的三次握手 第一次&#xff0c;客户端与服务端建立链接&#xff0c;需要发送请求连接的消息 第二次&#xff0c;服务端接口到数据后&#xff0c;返回一个确认的操作*&#xff08;至此客户端和服务端链路建立成功&#xff09; 第三…

如何利用宝塔面板和docker快速部署网站

当你有了一台服务器&#xff0c;就会折腾往这台服务器上部署各种好玩的网站。市面上有许多开源的网站项目&#xff0c;通过docker技术可以快速部署并使用&#xff0c;本文将以部署filebrowser举例介绍网站部署的基本流程。 1. 安装宝塔面板 宝塔面板是一款开源的网站运维工具…

部署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. 集群环境部署【三台…

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

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

java开发的智能聊天机器人_超级AI_支持自动绘画功能

支持Web、Android、IOS、H5等多终端应用。它使用OpenAI的ChatGPT模型实现智能聊天机器人&#xff0c;并支持绘图自动生成Vincent图。未来还将接入国内大型AI模型&#xff0c;如文心一言、统一千问、MOSS等模型&#xff0c;并不断更新以满足用户需求。 AI大脑软件中的AI绘画功能…

HuggingFists-低代码玩转LLM RAG(2) --Query

继上一篇文章我们探讨了如何使用HuggingFists实现文本的Embedding后。这一次我们将介绍如何使用HuggingFists实现LLM RAG的查询部分。 首先我们回顾一下RAG的结构&#xff0c;如下图&#xff1a; 基于向量数据库的RAG结构图 我们在上篇文章中介绍了如何使用HuggingFists实现结构…

GNN 学习笔记

稍微看一下之后备用。 【图神经网络综述】GNN原理&#xff0b;落地应用实现框架全解_gnn实现-CSDN博客 GNN相比CNN最大的区别在于数据结构&#xff0c;CNN一般作用在二维、三维数据里&#xff0c;如图像、表格数据等&#xff0c;可以进行卷积操作。而GNN作用在一个由节点和边…

PaddleSpeech的TTSAndroid编译armv7版本

1.下载docker镜像 docker pull paddlepaddle/paddle-lite:2.0.0_beta2.克隆代码 git clone https://github.com/PaddlePaddle/Paddle-Lite.git3.运行容器 docker run -it --name paddlelite_docker -v $PWD/Paddle-Lite:/Paddle-Lite --nethost paddlepaddle/paddle-lite …

ISP去噪(1)

#灵感# 因为理解的2DNR、3DNR 和当前调试平台标注的2DNR、3DNR 作用有很大差异&#xff0c;所以在网上广撒网&#xff0c;搜集知识。 目前收集出来一个这样的文章&#xff0c;有点像大学生的论文“取其精华&#xff0c;合成糟粕”。------权当一个记录册 目录 运动阈值&…

【华为鸿蒙系统学习】- HarmonyOS4.0开发工具和环境配置问题总结|自学篇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 官方链接 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装教程 &#xff08;…

[GFCTF 2021]文件查看器

文章目录 前置知识可调用对象数组对方法的调用GC回收机制phar修改签名 解题步骤 前置知识 可调用对象数组对方法的调用 我们先来看下面源码 <?phperror_reporting(0);class User{public $username;public $password;public function check(){if($this->username"…

flutter的ListView和SingleChildScrollView有什么区别?他们的使用场景有什么不一样?

文章目录 简介ListViewSingleChildScrollView使用场景的不同 简介 ListView和SingleChildScrollView都是在Flutter中用于处理滚动内容的组件&#xff0c;但它们有一些关键的区别。 ListView 多个子元素&#xff1a; ListView是一个滚动的可滚动组件&#xff0c;通常用于包含多…

接口管理——Swagger

Swagger是一个用于设计、构建和文档化API的工具集。它包括一系列工具&#xff0c;如Swagger Editor&#xff08;用于编辑Swagger规范&#xff09;、Swagger UI&#xff08;用于可视化API文档&#xff09;和Swagger Codegen&#xff08;用于根据API定义生成客户端库、server stu…

Web安全之XXE漏洞原理及实践学习

一、原理&#xff1a; XXE漏洞全称即XML外部实体注入漏洞。 攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件亦或是远程系统上的文件)&#xff0c;导致可加载恶意外部文件&#xff0c;利用file协议造成文件读取、命令执行、内网端口扫描、攻击内网网站等…

OCRmyPDF让你能搜索扫描版PDF文档

什么是 OCRmyPDF &#xff1f; PDF 是存储和交换扫描文档的最佳格式。不幸的是&#xff0c;PDF 可能很难修改。OCRmyPDF 是一个 Python 应用程序和库&#xff0c;可以轻松地将图像处理和 OCR&#xff08;可识别、可搜索的文本&#xff09;应用于现有 PDF&#xff0c;通过向扫描…