二叉树的节点个数以及高度详解(附图解)

二叉树的节点个数以及高度


文章目录

  • 二叉树的节点个数以及高度
  • 前言
  • 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)将图像视为一系列补丁,并通过全局范围内……

计算机笔试/面试常见逻辑题/智力题汇总

说明:按种类汇总,难度不分先后,做了分级罗列,方便后续扩充,大家有比较有意思的题目可以在讨论区讨论。 下面有的题题解相对复杂的直接参考了网上的一些解答,而有的题解我认为并不好的也做了补充&#xff0c……

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. 给定一个很长的……

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注