二叉树理论碎碎记

二叉树的种类

在刷题的过程中,我们主要关注两种主要形式:满二叉树和完全二叉树。

满二叉树

如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。如下图所示:

这棵二叉树为满二叉树,也可以说深度为k,有 2 k − 1 2^k-1 2k1个节点的二叉树。

完全二叉树

完整定义:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(h从1开始),则该层包含 1~ 2^(h-1) 个节点。

二叉搜索树

前面介绍的树,都没有数值的,而二叉搜索树是有数值的了,二叉搜索树是一个有序树。

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树

下面这两棵树都是搜索树

平衡二叉搜索树

平衡二叉搜索树:又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。如下图:

二叉树的存储方式

二叉树可以链式存储,也可以顺序存储。那么链式存储方式就用指针, 顺序存储的方式就是用数组。顾名思义就是顺序存储的元素在内存是连续分布的,而链式存储则是通过指针把分布在各个地址的节点串联一起。链式存储如图:

常见的是链式存储。而顺序存储的方式就是用数组来进行存储,具体为:

那么热如果父节点的数组下标为i,其左孩子的下标为 2 ∗ i + 1 2*i+1 2i+1,右孩子为 2 ∗ i + 2 2*i+2 2i+2

二叉树的遍历方式

主要有两种遍历方式:

  • 深度优先遍历:先往叶子结点的方向即深度方向走,遇到叶子结点再往回走
  • 广度优先遍历:一层一层的遍历

那么进一步对这两种方式进行细分,可划分为:

  • 深度优先遍历:
    • 前序遍历
    • 中序遍历
    • 后序遍历
  • 广度优先遍历
    • 层次遍历

在其中的前序、中序、后序遍历中,这里的其实指的是中间节点的遍历顺序,即:

  • 前序遍历:中左右
  • 中序遍历:左中右
  • 后序遍历:左右中

从下图中可以更好地理解:

二叉树的定义

主要关注用链式存储的二叉树是如何定义的:

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

二叉树的递归遍历

在二叉树中很重要的一种遍历实现方式是通过递归来实现的。
那么在递归算法中,最重要的三要素是:

  • 确定递归函数的参数和返回值:确定哪些参数是在递归过程中需要传递进行处理的,并且在递归完成之后哪些参数是需要返回的
  • 确定终止条件:在递归算法中需要明确终止条件,防止无法终止导致栈溢出
  • 确定单层递归的逻辑:确定在每层递归中我们需要做什么

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习基础】机器学习的基本术语

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: 【机器学习基础】机器学习入门(1) 【机器学习基…

ubuntu20.04有公网ip如何做端口映射?

一,有公网IP时如何做端口映射? 然后打开浏览器,输入192.168.2.1自己路由地址,进入路由器的控制面板(如果不知道用户名和密码,可以在自己路由设备背面可见默认帐号密码)。 点击转发规则&…

ESP32 Arduino实战基础篇-生成 PWM 信号

在本教程中,我们将向您展示如何使用 Arduino IDE 通过 ESP32 生成 PWM 信号。作为示例,我们将构建一个简单的电路,使用 ESP32 的 LED PWM 控制器对 LED 进行调光。我们还将向您展示如何同时在不同的 GPIO 上获取相同的 PWM 信号。 在继续本教程之前,您应该在 Arduino IDE 中…

pytorch-gpu(Anaconda3+cuda+cudnn)

文章目录 下载Anaconda3安装,看着点next就行比较懒所以自动添加path测试 cuda安装的时候不能改路径如果出现报错,关闭杀毒软件一直下一步就好取消勾选“CUDA”中的“Visual Studio Intergration”一直下一步即可测试安装成功 cudnn解压后将这三个文件夹复…

2023湖南省赛

​​​​​​连接 目录 A:开开心心233 B:Square Game F:necklace K:tourist 补题中,会给出大部分代码 A:开开心心233 签到题 ,无论二分还是解方程还是直接for循环枚举都能直接通过啦 signed main() {ios_base::sync_with_stdio(0); cin.tie(0),co…

基于FPGA的图像RGB转HLS实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1计算最大值和最小值 4.2计算亮度L 4.3计算饱和度S 4.4计算色调H 5.算法完整程序工程 1.算法运行效果图预览 将FPGA结果导入到MATLAB显示效果: 2.算法运行软件版本 Vivado…

【史上最全】涵盖所有「存图方式」与「最短路算法」

题目描述 这是 LeetCode 上的 「1334. 阈值距离内邻居最少的城市」 ,难度为 「中等」。 Tag : 「最短路」、「图」 有 个城市,按从 到 编号。 给你一个边数组 edges,其中 代表 和 两个城市之间的双向加权边,距离阈值是一个整…

ts+vite报错:找不到模块“/src/.../...”或其相应的类型声明

问题描述 vuets项目开发时,通过绝对路径引入模块,发现ts报错:找不到模块“/src/script/game”或其相应的类型声明。ts(2307)。但是项目能正常运行。 原因 由于并没有配置代表src,结果通过绝对路径引入还是报错,于是换…

国产源代码扫描工具DMSCA扫描出的报告优秀吗?

在源代码扫描工具中,扫描报告是非常具有参考意义的,一方面可以了解我们开发项目的漏洞情况,另一方面也可以针对扫出的漏洞进行修复,确保开发出安全可靠的软件。误报和漏报是一个非常重要的参考指标。 国产源代码扫描工具DMSCA&am…

andorid 日历选择器

先看效果图: 主要代码 package com.example.flyimport android.annotation.SuppressLint import android.content.Context import android.graphics.Color import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import…

算法通关村第九关-青铜挑战二分查找算法

大家好我是苏麟 , 今天聊聊二分查找算法 ...... 普通查找 普通查找就是最简单的循环查找 , 无论是有席的还是无席的都可以,也不需要排序,只需要一个个对比即可,但其实效率很低 : public int search(int[] arr, int target) {for (int i 0;…

GEE遥感云大数据林业应用典型案例实践及GPT模型应用

近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

SPSS时间序列分析:谱分析

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

eVTOL分布式电推进(DEP)动力测试系统

产品简介 分布式电推进(DEP)技术因其灵活多变的机械电气化设计,可以大大提升动力系统的安全性冗余,极大增强飞行过程中的可操控性,同时可以有效降低本机噪音,最大限度提升动力系统的能源使用效率等优势&am…

释放潜能,加速创新 | 低代码赋能企业数据资产管理(附案例)

在当今数字化快速发展的时代,企业要想保持竞争力,就必须紧跟潮流,不断进行自我革新。其中,数字化转型已成为企业发展的重要一环,在这个过程中,数据资产作为企业核心竞争力的关键组成部分,其管理…

​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型

内容来源:xiaohuggg Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型 ​该模型是由Hugging Face团队开发,它在Whisper核心功能的基础上进行了优化和简化,体积缩小了50%。速度提高了6倍。并且在分布外评估集上…

条码管理在WMS仓储管理系统中的应用

在当今快节奏的商业环境中,仓储管理对于企业的运营和成本控制具有重要意义。为了提高管理效率和准确性,越来越多的企业开始采用条码管理WMS系统。本文将介绍这一系统的应用场景、条码引入WMS仓储管理系统的步骤以及其在仓储管理中的应用价值,…

如何使用功率放大器

功率放大器是一种用于放大电流或电压的重要设备,广泛应用于音频、通信、无线电和电力等领域。正确地使用功率放大器可以确保其正常工作并获得满意的性能。下面西安安泰将介绍使用功率放大器的一般步骤和注意事项。 首先,了解功率放大器的规格和特性非常重…

uniapp运行到安卓模拟器一直在“同步手机端程序文件完成“界面解决办法

如果你是用的模拟器是android studio创建的模拟器,那么你需要新创建一个android11 x86架构的模拟器: 创建完成后,启动模拟器: 然后在hbuilder中重新运行到这个模拟器就可以了: 运行结果: 如果你是用安…

如何在 macOS 中删除 Time Machine 本地快照

看到这个可用82GB(458.3MB可清除) 顿时感觉清爽,之前的还是可用82GB(65GB可清除),安装个xcode都安装不上,费解半天,怎么都解决不了这个问题,就是买磁盘情理软件也解决不了…