二叉树总结

文章目录

  • 树需要掌握的基本概念
  • 二叉树
    • 基本特点
    • 满二叉树
      • 性质
    • 完全二叉树
      • 性质
    • 二叉搜索树(二叉排序树)Binary Search Tree(BST)
      • 性质
    • 平衡二叉树
      • 性质
    • 红黑树
      • 五大性质
    • B树
  • 二叉树的存储方式
    • 链式存储
    • 顺序存储
  • 二叉树的遍历

树需要掌握的基本概念

1、节点、根节点、父节点、子节点、兄弟节点
2、一棵树可以没有任何节点,称为空树
3、一棵树可以只有一个节点,这个时候这棵树只有根节点
4、子树,左子树、右子树是二叉树里面的概念
5、节点的度:子树的个数
6、叶子节点:度为0的节点
7、非叶子节点:度不为0的节点
8、层数:根节点在第一层,根节点的子节点在第二层,依此类推
9、节点的高度:从当前节点到最远叶子节点的路径上的节点总数
10、树的高度:所有节点高度中的最大值

二叉树

基本特点

1、每个节点的度最大为2(即一个节点最多拥有两棵子树
2、左子树和右子树是有固定顺序的(区别于有序树是相对顺序,有序树只有一个子节点时,是没有顺序的,其顺序是两个子节点中其中一个相对于另一个子节点的顺序)
3、非空二叉树的第i层,最多有2^(i-1)个节点
4、在高度为h的二叉树上最多有2^h - 1个节点

满二叉树

最后一层节点的度都为0,其他层节点度都为2。
在同样高度的二叉树中,满二叉树的叶子节点数量最多,总节点数量最多。

在这里插入图片描述

性质

假设满二文树的高度为h,
那么第i层的节点数量:2^(i-1)
叶子节点数量:2 ^(h - 1)
总节点数量n=2^h - 1
树高为:h=log(n+1)

完全二叉树

在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。
叶子节点只会出现在最后两层,且最后一层的叶子节点都从左向右填充。
若最底层为第 h 层,则该层包含 1~ 2^(h-1) 个节点。
注:满二叉树就是一个完全二叉树
在这里插入图片描述
在这里插入图片描述

性质

假设完全二叉树的高度为h,
那么至少有2^(h-1)个节点
最多有2^h - 1个节点 (满只叉树)
总结点数量为n
2 ^ (h-1) <= n < 2 ^ h - 1
h-1 <= log n < h
h = floor(log n)+1

二叉搜索树(二叉排序树)Binary Search Tree(BST)

二叉搜索树是一个有序树

性质

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树;
    在这里插入图片描述
    如图所示,两棵都是二叉排序树;
    在这里插入图片描述

如图所示,也是二叉搜索树。
对于二叉搜索树的详细介绍与实现请看我的二叉搜索树(BST)详解这一篇博客。

平衡二叉树

又被称为AVL(Adelson-Velsky and Landis)树

性质

它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
在这里插入图片描述
对于平衡二叉树的详细介绍与实现请看我的平衡二叉树详解

红黑树

红黑树是一颗二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是红色或者黑色
通过对任何一条从根到叶子的简单路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是近似平衡的。

五大性质

1、结点必须是红色或者黑色。
2、根节点是黑色。
3、叶子结点(外部结点、空结点,不是传统上认为的那种叶子结点,如图中的那些NIL结点)都是黑色
4、红色结点的子结点都是黑色
于是有推论:
  4.1、红色结点的父结点都是黑色
  4.2、从根结点到叶子结点的所有路径上不能有两个连续的红色结点
5、从任一结点到叶子结点(外部结点、空结点,不是传统上认为的那种叶子结点,如图中的那些NIL结点)的所有路径都包含相同数目的黑色结点
如图所示:
在这里插入图片描述
对于红黑树的详细介绍与实现请看我的红黑树理论详解与Java实现

B树

B树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树
B树类似于红黑树,但它们在降低磁盘 I/O 操作数方面要更好一些。
许多数据库系统使用 B树或者 B树的变种来存储信息。
B树与红黑树的不同之处在于 B树的结点可以有很多孩子,从数个到数千个。也就是说,一个 B树的“分支因子”可以相当大,尽管它通常依赖于所使用的磁盘单元的特性。
B树类似于红黑树,就是每棵含有n个结点的 B树的高度为 O(lgn)。然而,一棵 B树的严格高度可能比一棵红黑树的高度要小许多,这是因为它的分支因子,也就是表示高度的对数的底数可以非常大。因此,我们也可以使用 B树在时间 O(lgn)内完成一些动态集合的操作。

如示例:
3阶B树:子节点最多为3个
在这里插入图片描述
对于B树的详细介绍与实现请看我的B树(B-tree、B-树)理论详解

二叉树的存储方式

使用指针实现链式存储;
使用数组实现顺序存储;

链式存储

在这里插入图片描述

顺序存储

在这里插入图片描述
对于上图所示的顺序存储:如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i* 2 + 2。
注意:考虑另一种实现方式,0号数组下标不存储,从1号数组下标开始存储树节点,如果父节点的数组下标是 i,那么它的左孩子就是 i * 2,右孩子就是 i* 2 + 1,这种方式更加常用。
在使用时,一定注意数组下标从什么位置开始存储。

二叉树的遍历

对于二叉树的多种遍历方式在我的另一篇博客中有详细介绍与Java实现,可以参看这篇
二叉树的遍历方式博客

ps:计划每日更新一篇博客,今日2023-05-13,日更第二十七天。(补更)
昨日更新:

平衡二叉树理论详解

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

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

相关文章

Java版spring cloud 本工程项目管理系统源码-全面的工程项目管理

​ ​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈&#xff0c;内卷严重&#xff0c…

接口自动化测试神器:Python+Requests+Unittest让你的测试用例飞起来

B站首推&#xff01;2023最详细自动化测试合集&#xff0c;小白皆可掌握&#xff0c;让测试变得简单、快捷、可靠 随着互联网的发展&#xff0c;越来越多的应用程序采用了分布式架构&#xff0c;并通过API接口进行数据交换。因此&#xff0c;接口自动化测试已经成为了保证软件质…

【探索SpringCloud】服务发现

前言 今天&#xff0c;我们来聊聊SpringCloud服务发现。主要有如下几个议题&#xff1a; 一、服务发现的概念与方案&#xff1b;二、SpringCloud是如何与各个服务注册厂商进行集成的。 服务发现 在微服务架构中&#xff0c;我们不可避免的需要通过服务间的调用来完成系统功能…

蓝牙网状网络的基本原理及应用开发

借助蓝牙 5 的网状网络功能&#xff0c;开发人员可以增强无线连接系统&#xff08;如物联网设备&#xff09;的通信范围和网络可用性。但是&#xff0c;网状网络的低功耗无线硬件设计与网状网络软件开发之间存在着复杂的层次&#xff0c;这可能会使开发人员迅速陷入混乱并危及项…

今年的面试难度有点大....

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;又得准备面试了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&a…

Windows Cygwin 配置

Windows Cygwin 配置 一、什么是Cygwin&#xff1f; Cygwin&#xff0c;原Cygnus出品&#xff08;已被红帽收购&#xff09;&#xff0c;目前是RedHat名下的项目。项目的目的是提供运行于 Windows 平台的类 Unix 环境&#xff08;以 GNU 工具为代表&#xff09;。为了达到这个…

一天吃透SpringCloud面试八股文

1、什么是Spring Cloud &#xff1f; Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序&#xff0c;提供与外部系统的集成。Spring cloud Task&#xff0c;一个生命周期短暂的微服务框架&#xff0c;用于快速构建执行有限数据处理的应用程序。 Sprin…

前端|想到什么写什么

记录当初伤害过我的一些概念&#x1f60a; 文章目录 一、闭包二、深拷贝、浅拷贝三、slice、splice、join、split、filter、concat、sort、some、every四、for in和for of、 map和foreach五、原型和原型链六、跨域七、vue相关1、生命周期2、响应式原理3、watch和computed4、vu…

协程切换原理与实践 -- 从ucontext api到x86_64汇编

目录 1.协程切换原理理解 2.ucontext实现协程切换 2.1 实现流程 2.2 根据ucontext流程看协程实现 2.3 回答开头提出的问题 3.x86_64汇编实现协程切换 3.1libco x86_64汇编代码分析 3.2.保存程序返回代码地址流程 3.3.恢复程序地址以及上下文 4.实现简单协程框架 1.协程…

MySQL 中 CONCAT 函数使用

1&#xff1a;创建数据表&#xff1a; CREATE TABLE user ( id int NOT NULL AUTO_INCREMENT, code varchar(255) NOT NULL, name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT3 DE…

8款数据迁移工具选型,主流且实用

前言&#xff1a;ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。今天特地给大家汇总了一些目前市面上比较常用的ETL数据迁移工具&#xff0c;希望对…

小黑子—Java从入门到入土过程:第九章-IO流

Java零基础入门9.0 Java系列第九章- IO流1. 初识IO流2. IO流的体系2.1 字节流2.1.1 FileOutputStream 字符串输出流2.1.1 - I 字符串输出流的细节2.1.1 - II FileOutputStream写数据的3种方式2.1.1 -III FileOutputStream写数据的两个小问题 2.1.2 FileInputStream 字符串输入流…

拼多多买家如何导出“个人中心”订单信息

经常在拼多多买东西&#xff0c;有时候需要把订单的物流信息导出来&#xff0c;方便记录和统计。现介绍如何使用dumuz工具来实现批量下载拼多多订单。 应用功能描述 模拟人工操作拼多多"个人中心-我的订单”订单网页&#xff0c;批量查询获取拼多多自己买的商品的订单数…

javaweb项目实战之myBlog

项目简介 技术栈&#xff1a; Java Mysql Html Ajax Css JS Json 项目说明 &#xff1a;项目使用maven创建&#xff0c;使用MVC架构模式 表示层&#xff1a;通俗讲就是展现给用户的界面和控制器层Servlet&#xff0c;接受请求、封装数据、调用业务 逻辑层&#xff0c;响…

JavaScript实现计算100之间能被5整除的数的代码

以下为实现计算100之间能被5整除的数的程序代码和运行截图 目录 前言 一、计算100之间能被5整除的数 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本博文代码可以根据题…

平衡二叉树理论详解

文章目录 基本概念平衡二叉树插入结点LL&#xff08;左单旋&#xff09;RR&#xff08;右单旋&#xff09;LR&#xff08;左右旋&#xff09;RL&#xff08;右左旋&#xff09; 示例插入推导过程 基本概念 平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1&…

linux环境下设置python定时任务

linux环境下设置python定时任务 Linux 系统提供了使用者控制计划任务的命令 :crontab 命令 1、在linux环境执行命令,进入编辑界面 crontab -e2、按键盘 i 键&#xff0c;进入编辑模式&#xff0c;输入以下内容&#xff0c;设置2个定时任务 定时任务1&#xff1a;每隔10分钟执…

C语言爬取HTML-爬取壁纸 文末附源码

前言&#xff1a;这学期计算机软件课程设计的其中一个题目是使用C语言爬取HTML&#xff0c;本打算使用C语言的CSpidr库来实现&#xff0c;但是因为它的依赖liburi没有找到在哪里安装&#xff0c;所以放弃了这个想法&#xff0c;使用的是curl以及libxml2这两个库&#xff0c;能够…

GOOGLE|只有大模型才能理解你举的例子(In-context learning)是什么

一、概述 title&#xff1a;LARGER LANGUAGE MODELS DO IN-CONTEXT LEARNING DIFFERENTLY 论文地址&#xff1a;https://arxiv.org/abs/2303.03846 参考&#xff1a;https://www.xiaohongshu.com/user/profile/5f01057f0000000001003c91/640aa237000000001303d871 1.1 Moti…

springboot基于vue的地方美食分享网站

开发技术介绍 Java介绍 JavaScript是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&#xff0c;便于结构的分离&…