计算二叉树节点个数(汇总)

二叉树结构类型定义


// 定义二叉树节点结构体
typedef int TElemType;  // 假设数据类型为int,可根据需要修改
typedef struct BiTNode {TElemType data;struct BiTNode* lchild, * rchild;
} BiTNode, * BiTree;

计算二叉树总节点个数

思想:

递归求解法:
(1)如果二叉树为空,节点个数是0
(2)如果二叉树不为空,二叉树节点个数 = 左子树节点个数 + 右子树节点个数 + 1

程序设计

int TreeNodeNumall(BTNode * root)
{if(root== NULL) // 递归出口return 0;return TreeNodeNumall(root->lchild) + TreeNodeNumall(root->rchild) + 1;
}

计算度为0节点(叶子节点)的个数

思想:

求度为0(叶子节点)节点的个数 递归解法:

(1)如果二叉树为空,返回0

(2)如果二叉树不为空且左右子树为空,返回1

(3)如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数

程序设计

int TreeNodeNum0(BTNode * root)
{if(root== NULL)return 0;if(root->lchild== NULL && root->rchild== NULL)return 1;return TreeNodeNum0(root->lchild) + TreeNodeNum0(root->rchild);
}

计算度为1节点个数

思想:

度为1(只有一个子节点)的节点个数,递归解法与求叶子节点个数类似,但需要判断当前节点的左右子树是否只有一个不为空。具体步骤如下:

  1. 如果二叉树为空,返回0。
  2. 如果二叉树不为空且只有一个子树(即只有左子树或右子树不为空),返回1。
  3. 如果二叉树不为空,且左右子树均不为空,递归计算左子树和右子树中度为1的节点个数。

程序设计

int TreeNodeNum1(BTNode * root)
{if (root == NULL)return 0;// 只有一个子节点(左子树或右子树为空)if ((root->lchild == NULL && root->rchild != NULL) || (root->lchild != NULL && root->rchild == NULL))return 1;// 递归计算左右子树中的度为1的节点个数return TreeNodeNum1(root->lchild) + TreeNodeNum1(root->rchild);
}

计算度为2节点个数

思想:

要求度为2(即左右子树都不为空)的节点个数,递归解法的思路如下:

  1. 如果二叉树为空,返回0。
  2. 如果二叉树不为空且左右子树都不为空,返回1。
  3. 如果二叉树不为空,且左右子树不同时为空,递归计算左子树和右子树中度为2的节点个数。

程序设计 

int TreeNodeNum2(BTNode * root)
{if (root == NULL)return 0;// 只有左右子树都不为空时,说明度为2if (root->lchild != NULL && root->rchild != NULL)return 1;// 递归计算左右子树中的度为2的节点个数return TreeNodeNum2(root->lchild) + TreeNodeNum2(root->rchild);
}

判断两棵树是否相等

思想:

判断两棵二叉树是否相等,主要有以下几个步骤:

递归比较:如果两棵树的根节点的数据相等,则继续递归地比较左右子树。

递归终止条件

  1. 如果两棵树都为空,则认为它们相等。
  2. 如果一棵树为空,另一棵树不为空,则认为它们不相等。
  3. 如果根节点的数据不同,则认为它们不相等。

递归推进:如果根节点数据相同,继续比较左子树和右子树

程序设计

int areTreesEqual(BiTree tree1, BiTree tree2) {// 如果两棵树都为空,认为相等if (tree1 == NULL && tree2 == NULL) {return 1;}// 如果一棵树为空,另一棵树不为空,则不相等if (tree1 == NULL || tree2 == NULL) {return 0;}// 如果根节点的数据不相等,则不相等if (tree1->data != tree2->data) {return 0;}// 递归判断左子树和右子树是否相等return areTreesEqual(tree1->lchild, tree2->lchild) && areTreesEqual(tree1->rchild, tree2->rchild);

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

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

相关文章

AI开发 - GPT之魂 用Python 演示chatGPT的自注意力机制 - 机器学习

自注意力机制(Self-Attention)就是让模型在处理每个词时,学会“关注重点”,而不是平均地对每个词一视同仁。这种机制让 GPT 能更聪明地理解句子的上下文和语义之间的关系。 自注意力机制是 GPT 的核心,它帮助模型在理解…

将自定义 AWS S3 快照存储库连接到 Elastic Cloud

作者:来自 Elastic Annie Hansen, Stef Nestor 在本博客中,我们将介绍如何通过 Elasticsearch 的快照将我们已提交的集群数据备份到 AWS S3 存储桶中。在 Elastic Cloud(企业版)中,Elastic 在其 found-snapshots 存储…

linux下Qt程序部署教程

文章目录 [toc]1、概述2、静态编译安装Qt1.1 安装依赖1.2 静态编译1.3 报错1.4 添加环境变量1.5 下载安装QtCreator 3、配置linuxdeployqt环境1.1 在线安装依赖1.2 使用linuxdeployqt提供的程序1.3 编译安装linuxdeployqt 4、使用linuxdeployqt打包依赖1.1 linuxdeployqt使用选…

【QT】控件8

1.QDial 通过调节旋钮位置来控制窗口的不透明度&#xff1a; void Widget::on_dial_valueChanged(int value) {qDebug()<<value;this->setWindowOpacity((double)value/100); }效果演示&#xff1a; 2.Date/Time Edit 计算两个日期的差值 ui界面设计 计算按钮按下…

CGAL CGAL::Polygon_mesh_processing::self_intersections解析

CGAL::Polygon_mesh_processing::self_intersections 是用于检测多边形网格&#xff08;Polygon Mesh&#xff09;中的自相交的函数。自相交是指网格中的某些面&#xff08;例如三角形&#xff09;与同一网格中的其他面交叉的情况。这种情况通常是不期望的&#xff0c;因为它会…

k8s运行运行pod报错超出文件描述符表限制

1.问题描述 运行pod超过文件描述符表 unable to allocate file descriptor table - out of memory/opt/COMMAND.sh: line 9: 2.查看设备的文件描述符限制 操作前一定要先查询这个值&#xff0c;2097152这个值即为我们可设置的最大值&#xff0c;超过这个值后将无法登录&am…

[巅峰极客 2021]签到

[巅峰极客 2021]签到 给了我们好多表情&#xff0c;真的是一脸懵逼 注意给我们的关键词 GAME 现在还不知道是什么意思我们去试着解开一下 用这个emoji表情解密器&#xff0c;这里我找了好久才找到一个 emoji-aes 这里的Key值就是GAME 运行后出现flag NSSCTF{10ve_4nd_Peace…

【ETCD】etcd中配置参数详解

详细记录etcd服务启动的各个参数 1、etcd成员相关的配置项 --name default 为该成员指定一个易读的名称。--data-dir ${name}.etcd 数据存储目录的路径。--wal-dir 用于存放专用WAL&#xff08;Write-Ahead Log&#xff09;的目录路径。--snapshot-count 100000 触发快照…

10、流程控制语句

1、流程控制语句介绍 流程控制语句可以控制程序的执行过程&#xff0c;流程控制语句可以分为4种结构&#xff1a; a、顺序结构 b、选择结构 c、循环结构 d、跳转结构 2、顺序结构 程序是从main的第一句执行到最后一句 上一句执行完后才能执行下一句 顺序结构没有语句&#xff…

005 MATLAB符号微积分

前言&#xff1a; 在MATLAB中&#xff0c;数值与符号的主要区别在于它们的处理方式和应用场景 数值计算适用于实际的数值计算问题&#xff0c;如矩阵运算、数据分析等。符号计算适用于符号推导、公式化简和符号解析&#xff0c;如理论物理和工程计算。 01 符号对象 1.基本符…

“岗位复合化、技能层次化” 高职大数据技术专业人才培养实践

在全球数字化浪潮的推动下&#xff0c;大数据技术已经成为引领社会进步和经济发展的核心动力。随着《关于深化现代职业教育体系建设改革的意见》等系列指导问文件的发布&#xff0c;我国高职大数据技术专业的教育正迎来全新机遇与挑战。这些政策不仅明确了职业教育改革的方向&a…

51c自动驾驶~合集38

我自己的原文哦~ https://blog.51cto.com/whaosoft/12358456 #GaussianPretrain 万能3D高斯预训练表示&#xff01;爆拉3D检测、Occ、高精地图等四大任务&#xff01; 受Tesla的技术的推动&#xff0c;越来越多的厂商开始走"纯视觉"的路线&#xff0c;多数方案还…

MongoDB集群分片安装部署手册

文章目录 一、集群规划1.1 集群安装规划1.2 端口规划1.3 目录创建 二、mongodb安装&#xff08;三台均需要操作&#xff09;2.1 下载、解压2.2 配置环境变量 三、mongodb组件配置3.1 配置config server的副本集3.1.1 config配置文件3.1.2 config server启动3.1.3 初始化config …

小白新手村冒险之对象传递:对象的JSON序列化

Python的json.dumps与JavaScript的JSON.stringify&#xff1a;深入比较与实践 在数据交换和网络通信中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;扮演着至关重要的角色。Python的json.dumps和JavaScript的JSON.stringify都是将数据结构序列化为JSON…

AIGC--------AIGC在医疗健康领域的潜力

AIGC在医疗健康领域的潜力 引言 AIGC&#xff08;Artificial Intelligence Generated Content&#xff0c;人工智能生成内容&#xff09;是一种通过深度学习和自然语言处理&#xff08;NLP&#xff09;等技术生成内容的方式。近年来&#xff0c;AIGC在医疗健康领域展现出了极…

数据结构 (18)数的定义与基本术语

前言 数据结构是计算机科学中的一个核心概念&#xff0c;它描述了数据元素之间的关系以及这些元素在计算机中的存储方式。 一、数的定义 在计算机科学中&#xff0c;“数”通常指的是树形数据结构&#xff0c;它是一种非线性的数据结构&#xff0c;由节点&#xff08;或称为元素…

基于PoE交换机的智慧停车场监控组网应用

伴随城市发展快速&#xff0c;汽车保有量也不断增长&#xff0c;导致停车管理问题也愈发凸显。针对包括路侧停车位、地面停车场、地下停车场等场景的停车管理需求&#xff0c;通常会部署监控设备进行车位监测、现场安全监测等&#xff0c;助力构建智能化停车管理。因此如何为分…

【RocketMQ事务消息如何实现】

贴上一段实现代码, 业务中可以参考使用 Component public class TestIdpSender {public void sendInTransaction(String topic, String tag, String message){Message<String> msg MessageBuilder.withPayload(message).build();String dt topic ":" tag;…

ENSP IPV6-over-IPV4

IPv6是网络层协议的第二代标准协议&#xff0c;一个IPv6地址同样可以分为网络前缀和主机ID两个部分。 可以将IPV4的网络看成IPV6的承载网&#xff0c;只有IPv4网络是连通的&#xff0c;则IPv6网络才有可能连通。所以配置的时候需要先配置IPv4网络的路由功能&#xff0c;再配IP…

vue3透传Attributes

vue3透传Attributes,组件名称上写的事件、style、类名也会生效&#xff1b; 如果是透传事件&#xff0c;点击子组件内部按钮&#xff0c;会执行组件内部&#xff0c;再执行组件名上的 父组件 <script setup> import ChildView from ./ChildView.vuefunction onClick()…