当前位置: 首页 > news >正文

数据结构基础--------【二叉树基础】

二叉树基础

二叉树是一种常见的数据结构,由节点组成,每个节点最多有两个子节点,左子节点和右子节点。二叉树可以用来表示许多实际问题,如计算机程序中的表达式、组织结构等。以下是一些二叉树的概念:

  1. 二叉树的深度:从根节点到叶子节点的最长路径的长度称为二叉树的深度,也称为高度。
  2. 二叉树的度:一个节点拥有的子节点数量称为该节点的度。二叉树的度为2,即每个节点最多只有两个子节点。
  3. 二叉树的遍历:二叉树的遍历是指按照一定顺序访问树中的所有节点。常用的遍历方式有前序遍历、中序遍历和后序遍历。
  4. 二叉查找树:二叉查找树是一种特殊的二叉树,它的左子树中所有节点的值都小于根节点的值,而右子树中所有节点的值都大于根节点的值。

二叉树的定义:

	struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int x):val(x),left(nullptr),right(nullptr) {}}
  1. 二叉树的基本操作:包括二叉树的创建、遍历、搜索等。
  2. 二叉查找树的实现及应用:包括二叉查找树的创建、插入、删除、查找等操作。
  3. 平衡二叉树:为了解决二叉查找树在某些情况下退化为链表的问题,出现了平衡二叉树,如 AVL 树和红黑树等。
  4. 线段树:线段树是一种特殊的二叉树,用于解决区间查询的问题,如区间最大值、区间和等。
  5. 树状数组:树状数组也是一种特殊的二叉树,用于解决前缀和、区间和等问题。

1基础介绍

1.基础术语

结点的度:结点的字数个数,比如二叉树的度为2(一个节点最多有2个字数个数)。
树的度:数的所有结点中最大的度数。
叶结点:度为0的结点。
父结点,子结点,兄弟结点(具有同一个父结点的各结点)。
路径和路径的长度:从结点n1到nk,路径所包含的边的个数为路径的长度。
祖先结点,子孙结点。
结点的层次:规定根结点在1层,然后后面的结点层次都依次加一。
树的深度:树中国所有结点的最大层次是这棵树的深度。
二叉树T:一个有穷的结点集合,二叉树的子树有左右顺序之分

2.二叉树的定义

二叉树T:一个有穷的结点集合,二叉树的子树有左右顺序之分
特殊的二叉树:斜二叉树,满二叉树,完全二叉树(连续结点)

3.二叉树的性质

①个二叉树第i层的最大结点数为: 2^(i-1),(i≥1)
②深度为k的二叉树有最大结点总数为:(2^k)-1, k≥1。(1+2 ^1+2 ^2 …2 ^i )
③0对任何非空二叉树T,若n0表示叶结点的个数、n2是度为2的非叶结点个数,那么两者满足关系n0=n2 +1。
(n0+n1+n2-1) = 0n0+n1+2n2

4.二叉树的遍历

根据遍历结点的顺序,分为前序遍历(NLR),中序遍历(LNR),后续遍历(LRN)。树的遍历复杂度为o(n)。
所以看树的前序数组第一个是根结点,后续遍历数组最后一个是根结点,再把该根结点拿到中序遍历数组中去比对就可以划分左右子树。

4.1 前序遍历

如果二叉树为空,什么都不做,否则:
1)访问根节点;
2)先序遍历左子树
3)先序遍历右子树*/
void PreOrder(BiTree T){if(T!= null){vist(T);//访问根结点NPreOrder(T->lchild);//访问左子树L 递归PreOrder(T->rchild);//访问右子树R}
}

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9bb1889a4e194ea79a4cddeafc8109fc.png = 200x200)

4.2 中序遍历

/*inorder:
如果二叉树为空,什么都不做,否则:
1)中遍历左子树
2)访问根节点;
3)中序遍历右子树*/
void InOrder(BiTree T){if(T!= null){InOrder(T->lchild);//访问左子树L 递归vist(T);//访问根结点NInOrder(T->rchild);//访问右子树R}
}

在这里插入图片描述
4.3 后序遍历

/*Postorder:
如果二叉树为空,什么都不做,否则:
1)后序遍历左子树
2)后序遍历右子树
3)访问根节点;*/void PostOrder(BiTree T){if(T!= null){PostOrder(T->lchild);//访问左子树L 递归PostOrder(T->rchild);//访问右子树Rvist(T);//访问根结点N}
}

在这里插入图片描述

4.4层序遍历

2.遍历基础

1.DFS(Depth First Search):递归法得到最终的数组(深度优先算法)

其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,如果遇到死路就往回退,回退过程中如果遇到没探索过的支路,就进入该支路继续深入,每个节点只能访问一次。

深度优先搜索应用:先序遍历,中序遍历,后序遍历。二叉树的前序、中序、后序遍历,本质上可以认为是深度优先遍历。是一种回溯思想。

2.BFS(Breadth First Search):迭代法实现层序遍历,每次遍历二叉树的某一层。
它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。基本过程,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。一般用队列数据结构来辅助实现算法。

广度优先搜索应用:层序遍历、最短路径、求二叉树的最大高度、由点到面遍历图、拓扑排序

在我们解题过程中二叉树有两种主要的形式:满二叉树和完全二叉树。

二叉树分类

满二叉树

如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。
如图所示:
在这里插入图片描述
这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。

完全二叉树

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

平衡二叉搜索树

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

如图:
在这里插入图片描述
最后一棵 不是平衡二叉树,因为它的左右两个子树的高度差的绝对值超过了1。

二叉搜索树

前面介绍的树,都不用管数值的,而二叉搜索树是要参考数值的,二叉搜索树是一个有序树。
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
它的左、右子树也分别为二叉排序树
下面这两棵树都是搜索树:
在这里插入图片描述
二叉搜索树中序遍历是从小到大的有序数组。

C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_map、unordered_set,unordered_map、unordered_set底层实现是哈希表。

(文章部分参考代码随想录,链接: link

相关文章:

数据结构基础--------【二叉树基础】

二叉树基础 二叉树是一种常见的数据结构,由节点组成,每个节点最多有两个子节点,左子节点和右子节点。二叉树可以用来表示许多实际问题,如计算机程序中的表达式、组织结构等。以下是一些二叉树的概念: 二叉树的深度&a…...

数据开源 | Magic Data大模型高质量十万轮对话数据集

能够自然的与人类进行聊天交谈,是现今的大语言模型 (LLM) 区别于传统语言模型的重要能力之一,近日OpenAI推出的GPT-4o给我们展示了这样的可能性。 对话于人类来说是与生俱来的,但构建具备对话能力的大模型是一项不小的挑战,收集高…...

webpack之ts打包

tsconfig.json配置 // 是否对js文件进行编译,默认false"allowJs": true,// 是否检查js代码是否符合语法规范,默认false(引入的外部文件有可能语法有问题)"checkJs": true, allowJs和checkJs基本是同时出现,因为有了allowJs 这个检查…...

MATLAB数据统计描述和分析

描述性统计就是搜集、整理、加工和分析统计数据, 使之系统化、条理化,以显示出数据资料的趋势、特征和数量关系。它是统计推断的基础,实用性较强,在数学建模的数据描述部分经常使用。 目录 1.频数表和直方图 2 .统计量 3.统计…...

设计分享—国外后台界面设计赏析

国外后台界面设计将用户体验放在首位,通过直观易懂的布局和高效的交互设计,提升用户操作效率和满意度。 设计不仅追求美观大方,还注重功能的实用性和数据的有效展示,通过图表和图形化手段使数据更加直观易懂。 采用响应式布局&a…...

最小生成树(算法篇)

算法之最小生成树 最小生成树 概念: 最小生成树是一颗连接图G所有顶点的边构成的一颗权最小的树,最小生成树一般是在无向图中寻找。最小生成树共有N-1条边(N为顶点数)。 算法: Prim算法 概念: Prim(普里姆)算法是生成最小生…...

教师管理小程序的设计

管理员账户功能包括:系统首页,个人中心,教师管理,个人认证管理,课程信息管理,课堂记录管理,课堂统计管理,留言板管理 微信端账号功能包括:系统首页,课程信息…...

Selenium 等待

环境: Python 3.8 selenium3.141.0 urllib31.26.19 Chromium 109.0.5405.0 (32 位) # 1 固定等待(time) # 固定待是利用python语言自带的time库中的sleep()方法,固定等待几秒。 # 这种方式会导致这个脚本运…...

安装easy-handeye

一、aruco_ros配置 mkdir -p ~/ros_ws/src cd ~/ros_ws/src git clone -b melodic-devel https://github.com/pal-robotics/aruco_ros.git cd .. catkin_make 二、visp配置(需要联外网下载东西,不然会一直出问题) sudo apt-get install ros-melodic-…...

【面试题】MySQL 索引(第二篇)

1.索引 索引是数据库中的一个核心概念,它对于提高数据库查询效率至关重要。以下是索引的详细概念解析: 一、索引的定义 基本定义:索引是一个排序的列表,其中存储着索引的值和包含这些值的数据所在行的物理地址(或逻…...

4. 小迪安全v2023笔记 javaEE应用

4. 小迪安全v2023笔记 javaEE应用 ​ 大体上跟随小迪安全的课程,本意是记录自己的学习历程,不能说是完全原创吧,大家可以关注一下小迪安全。 若有冒犯,麻烦私信移除。 默认有java基础。 文章目录 4. 小迪安全v2023笔记 javaEE应…...

anaconda修改安装的默认环境

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️如遇文章付费,可先看…...

MySQL 9.0 正式发行Innovation创新版已支持向量

从 MySQL 8.1 开始,官方启用了新的版本模型:MySQL 创新版 (Innovation) 和长期支持版 (LTS)。 根据介绍,两者的质量都已达到可用于生产环境级别。区别在于: 如果希望尝试最新的功能和改进,并喜欢与最新技术保持同步&am…...

基于Java+SpringMvc+Vue技术的智慧校园系统设计与实现

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…...

【蔬菜网元宇宙】—— 探索农业的未来之旅

在数字化时代的浪潮中,技术和创新不断塑造着我们的生活方式。现在,这种变革已经延伸到了农业领域。蔬菜网,一个专注于农产品供应链的领先平台,自豪地宣布我们正式迈入元宇宙的世界——一个全新的虚拟空间,旨在彻底改变…...

淘宝商品历史价格查询(免费)

当前资料来源于网络,禁止用于商用,仅限于学习。 淘宝联盟里面就可以看到历史价格 并且没有加密 淘宝商品历史价格查询可以通过以下步骤进行: 先下载后,登录app注册账户 打开淘宝网站或淘宝手机App。在搜索框中输入你想要查询的商…...

14-47 剑和诗人21 - 2024年如何打造AI创业公司

​​​​​ 2024 年,随着人工智能继续快速发展并融入几乎所有行业,创建一家人工智能初创公司将带来巨大的机遇。然而,在吸引资金、招聘人才、开发专有技术以及将产品推向市场方面,人工智能初创公司也面临着相当大的挑战。 让我来…...

WPF界面设计-更改按钮样式 自定义字体图标

一、下载图标文件 iconfont-阿里巴巴矢量图标库 二、xaml界面代码编辑 文件结构 &#xe653; 对应的图标代码 Fonts/#iconfont 对应文件位置 <Window.Resources><ControlTemplate TargetType"Button" x:Key"CloseButtonTemplate"…...

开源项目的机遇与挑战

随着全球经济和科技环境的快速变化&#xff0c;开源软件项目的蓬勃发展成为了开发者社区的热门话题。越来越多的开发者和企业选择参与开源项目&#xff0c;以推动技术创新和实现协作共赢。本文将从开源项目的发展趋势、参与开源的经验分享&#xff0c;以及开源项目的挑战三个方…...

Linux实现CPU物理隔离

文章目录 背景使用 taskset 命令使用 cgroups案例 背景 在 Linux 上实现 CPU 的物理隔离&#xff08;也称为 CPU 隔离或 CPU pinning&#xff09;&#xff0c;可以通过将特定的任务或进程绑定到特定的 CPU 核心来实现。这可以提高系统性能&#xff0c;尤其是在需要实时响应的应…...

springer latex模板参考文献不显示

原因 his is BibTeX, Version 0.99d (TeX Live 2024) The top-level auxiliary file: sn-article.aux I couldn’t open style file sn-mathphys-num.bst —line 2 of file sn-article.aux : \bibstyle{sn-mathphys-num : } I’m skipping whatever remains of this command I…...

使用Vue3、Pinia和Vite5打造高度还原的抖音仿制项目

douyin-vue 是一个模仿 抖音|TikTok 的移动端短视频项目。Vue 在移动端的"最佳实践"&#xff0c;媲美原生 App 丝滑流畅的使用体验。使用了最新的 Vue 技术栈&#xff0c;基于 Vue3、Vite5 、Pinia实现。数据保存在项目本地&#xff0c;通过 axios-mock-adapter 库拦…...

stm32基本定时器

Driver_TIM6.c 需要注意立即进入中断问题&#xff0c;原因是预分频寄存器并没有更新预分频系数。 #include "Driver_TIM6.h" #include "Delay.h" /*** description: 给定时器6进行初始化* return {*}*/ void Driver_TIM6_Init(void) {/* 1. 给定时器6开启…...

网络安全基础-1

棱角社区&#xff1a;[~]#棱角 ::Edge.Forum* 专业名词 操作系统 文件下载 linux:下载命令 1. wget命令 wget是一个非常强大的命令行下载工具&#xff0c;支持HTTP、HTTPS、FTP等多种协议&#xff0c;并具备断点续传、递归下载等功能。 基本用法&#xff1a; 下载文件到…...

SSH远程访问及控制

目录 一、SSH远程管理 1、SSH定义 2、SSH客户端和服务端 3、SSH工作类型 3.1、对称加密 3.2、非对称加密 4、SSH工作原理 公钥传输原理 4.1、基本概念 4.2、工作过程 5、OpenSSH服务器 二、SSH远程登录方式 1、SSH直接远程登录 2、SSH指定端口登录 3、黑白名单 …...

Qt 绘图详解

文章目录 头文件和构造函数启用反锯齿功能绘制矩形绘制圆角矩形绘制椭圆绘制圆弧绘制弦绘制凸多边形绘制图片绘制直线绘制多条直线绘制多点连接的线绘制路径绘制扇形绘制点绘制文本擦除矩形区域填充矩形填充路径 头文件和构造函数 #include "mainwindow.h" #include…...

Python 爬虫与 Java 爬虫:相似之处、不同之处和选项

在信息时代&#xff0c;网络上可用的数据量巨大且不断增长。为了从这些数据中提取有用的信息&#xff0c;爬虫已成为一种重要的技术。Python 和 Java 都是流行的编程语言&#xff0c;都具有强大的爬虫功能。本文将深入探讨 Python 爬虫和 Java 爬虫之间的差异&#xff0c;以帮助…...

视频监控汇聚平台LntonCVS视频监控系统解决智慧产业园的安全应用方案

近年来&#xff0c;随着全国各地数字化转型和相关政策的出台&#xff0c;数字化和智慧化在各行业迅速发展&#xff0c;尤其是作为产业集群重要组成部分的产业园区。然而&#xff0c;园区智慧化进程加快的同时&#xff0c;数字化转型面临着诸如视频监控数据分散、联通不畅、碎片…...

MAVLink代码生成-C#

一. 准备Windows下安装环境 Python 3.3 – 官网链接下载Python future模块 –pip3 install future TkInter (GUI 工具). – python for Windows自带&#xff0c;无需下载环境变量PYTHONPATH必须包含mavlink存储库的目录路径。 –set PYTHONPATH你的mavlink源码路径 源码下载在…...

二四、3d人脸构建

一、下载github项目3dmm_cnn-master https://github.com/anhttran/3dmm_cnn.git 一个使用深度神经网络从单个图像进行 3D 人脸建模的项目,端到端代码,可直接根据图像强度进行 3D 形状和纹理估计;使用回归的 3D 面部模型,从检测到的面部特征点估计头部姿势和表情。…...

wordpress添加icp/seo公司

简单HTTP数据请求 超文本传输协议 (HTTP) 用作客户端和服务器之间的请求-响应协议。本实例将演示如何通过ESP8266发起一个HTTP请求,向远程主机请求数据。 在开始本实例之前,首先准备一个可用的HTTP服务器,或一个可用的HTTP URL。在这里,通过Node-Red物联网编程环境创建一…...

网站网页制作教程/如何优化培训方式

题目链接 1043 输出PATest 题目描述 给定一个长度不超过 10 4的、仅由英文字母构成的字符串。请将字符重新调整顺序&#xff0c;按 PATestPATest.... 这样的顺序输出&#xff0c;并忽略其它字符。当然&#xff0c;六种字符的个数不一定是一样多的&#xff0c;若某种字符已经输…...

wordpress 评论表情插件/aso应用优化

前言 本章内容是android.os.HandlerThread&#xff0c;版本为Android 3.1 r1&#xff0c;翻译来自"雪鹰工作室"&#xff0c;再次感谢"雪鹰工作室"&#xff01;欢迎你一起参与Android的中文翻译&#xff0c;联系我over140gmail.com。 声明 欢迎转载&#x…...

网站内容添加/免费优化网站

图&#xff1a;微博内地人工智慧(AI)企业银河水滴昨日在北京发布全球首个“步态识别”系统&#xff0c;具有步态建库、步态识别、步态检索、大范围追踪等功能。据了解&#xff0c;即使目标人物遮住脸&#xff0c;也可以透过走路方式辨认出身份。有关的“步态识别”系统已在北京…...

个体户 建设网站/线上免费推广平台都有哪些

xampp 是一个非常方便的本地 apache php mysql 的调试环境&#xff0c;在本地安装测试 WordPress 等各种博客、论坛程序非常方便。今天我们来给大家介绍一下&#xff0c;如何使用 XAMPP 在本地进行安装多个网站。 一般情况下&#xff0c;我们只需要网站程序放到 xampp/htdoc …...

自己做的网站可以挂在哪里/搜索引擎技术包括哪些

以前买英语书&#xff0c;最喜欢的就是《xx英语高频词汇手册》之类&#xff0c;仿佛只需要背过这些词&#xff0c;考试就没问题了。 基于相同的理念&#xff0c;我也写一个机器学习领域的"高频功能手册"吧。 作为一枚机器学习的新手&#xff0c;我在这两年中看了不少…...