二叉树的节点个数以及高度
文章目录
- 二叉树的节点个数以及高度
- 前言
- NO.1 定义链式二叉树
- NO.2 创建二叉树
- 一、二叉树节点个数
-
- 1.代码展示
- 2.递归图解
- 二、二叉树叶子节点个数
-
- 1.代码展示
- 2.递归图解
- 三、二叉树第k层节点个数
-
- 1.代码展示
- 2.递归图解
- 四、二叉树高度和深度
-
- 1.代码展示
- 2.递归图解
- 五、二叉树查找值为x的节点
-
- 1.代码展示
- 2.递归图解
- 总结
前言
本文介绍二叉树的节点个数以及高度,每道题都附有源码+图解
NO.1 定义链式二叉树
代码如下(示例):
typedef char BTDataType;
typedef struct BinaryTreeNode
{struct BinaryTreeNode* left;struct BinaryTreeNode* right;BTDataType data;
}BTNode;
NO.2 创建二叉树
我们想要实现如图所示的链式二叉树,代码实现如下(把每一个节点都一一链接起来)
代码如下(示例):
BTNode* BuyNode(BTDataType x)
{BTNode* node = (BTNode*)malloc(sizeof(BTNode));if (node == NULL){printf("malloc fail\n");exit(-1);}node->data = x;node->left = node->right = NULL;return node;
}
BTNode* CreatBinaryTree()
{BTNode* nodeA = BuyNode('A');BTNode* nodeB = BuyNode('B');BTNode* nodeC = BuyNode('C');BTNode* nodeD = BuyNode('D');BTNode* nodeE = BuyNode('E');nodeA->left = nodeB;nodeA->right = nodeC;nodeB->left = nodeD;nodeC->left = nodeE;return nodeA;
}
一、二叉树节点个数
我们刚创建完的二叉树中,节点个数有:5 个,下面是代码展示 + 递归图解!
1.代码展示
代码如下(示例):
int BinaryTreeSize(BTNode* root)
{return root == NULL ? 0 :BinaryTreeSize(root->left)+ BinaryTreeSize(root->right)+ 1;
}
2.递归图解
这里这画出了A左节点的递归展开图,右节点递归展开图和下面差不多,感兴趣的可以自行画图!
二、二叉树叶子节点个数
叶子节点:度为0的节点被称为叶节点,比如我们双肩的二叉树中的D和E两个节点!
1.代码展示
代码如下(示例):
// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root)
{if (root == NULL){return 0;}if (root->left == NULL && root->right == NULL){return 1;}return BinaryTreeLeafSize(root->left) + BinaryTreeLeafSize(root->right);
}
2.递归图解
这里这画出了A左节点的递归展开图,右节点递归展开图和下面差不多,感兴趣的可以自行画图!
三、二叉树第k层节点个数
1.代码展示
代码如下(示例):
// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root)
{if (root == NULL){return 0;}if (root->left == NULL && root->right == NULL){return 1;}return BinaryTreeLeafSize(root->left) + BinaryTreeLeafSize(root->right);
}
2.递归图解
这里这画出了A左节点的递归展开图,右节点递归展开图和下面差不多,感兴趣的可以自行画图!
四、二叉树高度和深度
树的高度或深度:树中节点的最大层次。我们构建的二叉树的高度或深度为 4
1.代码展示
代码如下(示例):
// 二叉树深度/高度
int BinaryTreeDepth(BTNode* root)
{if (root == NULL){return 0;}//return BinaryTreeDepth(root->left) > BinaryTreeDepth(root->right) /*? BinaryTreeDepth(root->left) + 1 : BinaryTreeDepth(root->right) + 1;*/int leftDepth = BinaryTreeDepth(root->left);int rightDepth = BinaryTreeDepth(root->right);return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
2.递归图解
这里这画出了A左节点的递归展开图,右节点递归展开图和下面差不多,感兴趣的可以自行画图!
五、二叉树查找值为x的节点
1.代码展示
代码如下(示例):
// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{if (root == NULL)return NULL;if (root->data == x)return root;BTNode* leftRet = BinaryTreeFind(root->left, x);if (leftRet)return leftRet;BTNode* rightRet = BinaryTreeFind(root->right, x);if (rightRet)return rightRet;return NULL;//return BinaryTreeFind(root->right, x);
}
2.递归图解
这里这画出了A左节点的递归展开图,右节点递归展开图和下面差不多,感兴趣的可以自行画图!
总结
以上就是今天要讲的内容,本文介绍二叉树的节点个数以及高度以及各自的递归展开图!
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/2181142.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
二叉树的节点个数以及高度详解(附图解)
二叉树的节点个数以及高度 文章目录二叉树的节点个数以及高度前言NO.1 定义链式二叉树NO.2 创建二叉树一、二叉树节点个数1.代码展示2.递归图解二、二叉树叶子节点个数1.代码展示2.递归图解三、二叉树第k层节点个数1.代码展示2.递归图解四、二叉树高度和深度1.代码展示2.递归图……
PHP迭代器模式(Iterator Pattern)
迭代器模式
迭代器模式(Iterator Pattern)是一种常用的设计模式,用于遍历集合中的元素,不暴露集合的内部结构。迭代器模式将集合和遍历分离,使得集合和遍历可以独立地变化。 迭代器模式包含以下角色:
抽象……
springboot项目感受02
接着上文 01.写完pojo实体类后,写dao层的数据操作接口,命名方式xxxxdao。 先写select * from 表名,用list(util)来接受,需要用到的注解有Mapper 这个注解表示接口是与数据库有关,会实例化这个接……
模拟实现atoi函数(将数字字符串转换为整型)附加leedcode练习题
各位朋友们,大家好啊!今天我为大家分享的知识是如何模拟实现atoi函数。相信大家如果能够理解这个知识,对大家以后的刷题是有帮助的。 文章目录什么是atoi函数(atoi函数的作用)先直接使用库函数看看这个函数是什么作用都……
DPDK — 数据面性能测试
目录 文章目录 目录数据面性能指标L2/L3 转发性能指标带宽 / 吞吐量(PPS)延迟(E2E RTT)抖动丢包率L4 连接性能指标TCP 最大连接数(Maximum Connection)TCP 每秒新建连接数(CPS)L5-7 应用性能指标每秒查询数(QPS)每秒事务数(TPS)性能测试设计方法论测试环境参数示例……
DevOps和主流devOps组件
DevOps
DevOps 就是开发(Development)、测试(QA)、运维(Operations)这三个领域的合并。DevOps是一种软件开发方法,涉及软件在整个开发生命周期中的持续开发,持续测试,持……
Compose(?/N) – 状态 State
一、概念 Compose将界面(Composable可组合函数)和数据(State状态)分开。 1.1 状态 State 一个变量,不同的值就是不同的状态。在组件中创建 State 务必对其进行 remember 操作,否则每次重组都会初始化成默认……
大数据领域的发展及其对现实世界的价值
大数据已经成为全球各行业领域不可或缺的一部分,并且其应用不断涌现。尽管很多人最初对“大数据”这一术语表示怀疑和不信任,但大数据技术已经确立了稳定的发展方向。根据调研机构的预测,到2027年,全球大数据市场规模将达到1090亿……
Windows下安装zookeeper,以及相关问题的解决办法
1、下载zookeeper
国内开源镜像下载:Index of /apache/zookeeper 下载后解压到自己想要的位置,zookeeper是免安装的。
2、配置zookeeper
安装好后我们在根目录下创建两个文件夹,一个是data,一个是log; 然后我们打开……
Image as Set of Points
摘要
什么是图像以及如何提取潜在特征?卷积网络(ConvNets)将图像视为矩形的有组织像素,并通过局部区域的卷积运算提取特征;视觉转换器(ViTs)将图像视为一系列补丁,并通过全局范围内……
计算机笔试/面试常见逻辑题/智力题汇总
说明:按种类汇总,难度不分先后,做了分级罗列,方便后续扩充,大家有比较有意思的题目可以在讨论区讨论。 下面有的题题解相对复杂的直接参考了网上的一些解答,而有的题解我认为并不好的也做了补充,……
OpenAI文档翻译——搭建第一个自己的ChatGPT应用
这篇主要是讲了重头到位创建一个基于OpenAI API的应用程序的过程,同时给出了Node.js、Python版本的实例代码。应用程序的构建总体来说是很简单的就是一个接口调用,前提是我们需要提供密匙。
如果想要获取更好的结果返回一个是可以给模型提供一些列子从而……
python以及PyCharm工具的环境安装与配置
这里以Windows为例
Python的安装
当然是到Python官网下载咯,https://www.python.org/downloads/点我直达,如图: 可以下载最新版本,可以下拉找到之前特定的版本安装,如图: 这里先择的是最新版的进行安装……
JavaScript【六】JavaScript中的字符串(String)
文章目录🌟前言🌟字符串(String)🌟单引号和双引号的区别🌟属性🌟 length :字符串的长度🌟 方法🌟 str.charAt(index);🌟 str.charCodeAt(index);🌟 String.fromCharCode(……
获取文件MD5小案例(未拆分文件)
文章目录前端获取MD5后端获取MD5前端获取MD5
1、引入js
<script src"js/spark-md5.min.js" type"text/javascript"></script>注:spark-md5库GitHub链接 2、这里是一个按钮和被隐藏调的<input/>标签 <body><button……
Java 进阶(15)线程安全集合
CopyOnWriteArrayList
线程安全的ArrayList,加强版读写分离。
写有锁,读⽆锁,读写之间不阻塞,优于读写锁。
写⼊时,先copy⼀个容器副本、再添加新元素,最后替换引⽤。
使⽤⽅式与ArrayList⽆异。
示例……
HR:面试官最爱问的linux问题,看看你能答对多少
文章目录摘要Linux的文件系统是什么样子的?如何访问和管理文件和目录?如何在Linux中查看和管理进程?如何使用Linux命令行工具来查看系统资源使用情况?如何配置Linux系统的网络设置?如何使用Linux的cron任务调度器来执行……
vscode开发常用的工具栏选项,查看源码技巧以及【vscode常用的快捷键】
一、开发常用的工具栏选项
1、当前打开的文件快速在左侧资源树中定位: 其实打开了当前的文件已经有在左侧资源树木定位了,只是颜色比较浅 2、打开太多文件的时候,可以关闭 3、设置查看当前类或文件的结构 OUTLINE
相当于idea 查看当前类或接……
数据要素化条件之一:原始性
随着技术的发展,计算机不仅成为人类处理信息的工具,而且逐渐地具有自主处理数据的能力,出现了替代人工的数据智能技术。数据智能的大规模使用需要关于同一分析对象或同一问题的、来源于不同数据源的海量数据。这种数据必须是针对特定对象的记……
【面试题 高逼格利用 类实现加法】编写代码, 实现多线程数组求和.
编写代码, 实现多线程数组求和.关键1. 数组的初始化关键2. 奇偶的相加import java.util.Random;public class Thread_2533 {public static void main(String[] args) throws InterruptedException {// 记录开始时间long start System.currentTimeMillis();// 1. 给定一个很长的……
编程日记2023/4/16 14:56:10