二叉树——二叉查找树和红黑树

article/2025/10/1 4:03:40

二叉树

二叉树,是一个非常重要的数据结构,在日常的开发中起着很重要的作用,它也衍生出来的各种高效的复杂的数据结构,为我们解决问题提供了高效的解决方案。

image.png

二叉树,它是由各个数据节点和左右链接构成的一种类似树的数据结构。一棵二叉树,我们只需要知道根节点,便可以访问到树中各个节点;同时树中的每一个节点,都有自身包装的数据和指向它的左右子节点的链接,如果不存在子节点,为null值,每一个节点(除去根节点)都有一个父亲节点。

节点(TreeNode)的数据结构

private class TreeNode {Data data;//节点包装的数据TreeNode left;//左节点TreeNode right;//右节点/**其他数据项**/...
}

二叉树的遍历

先序遍历

即是在进行树遍历的时候,先访问父节点,然后访问左节点,最后访问右节点。

private void preorderTraversal(TreeNode node) {if (node != null) {System.out.println("data: " + node.data);preorderTraversal(node.left);preorderTraversal(node.right);}
}

中序遍历

即是在进行树遍历的时候,先访问左节点,然后访问父节点,最后访问右节点。

private void middleTraversal(TreeNode node) {if (node != null) {middleTraversal(node.left);System.out.println("data: " + node.data);middleTraversal(node.right);}
}

后序遍历

即是在进行树遍历的时候,先访问左节点,然后访问右节点,最后访问父节点。

private void lastTraversal(TreeNode node) {if (node != null) {lastTraversal(node.left);lastTraversal(node.right);System.out.println("data: " + node.data);}
}

二叉查找树

二叉查找树,顾名思义,肯定是一个方便于查找的数据结构,先看看一下二叉查找树的例子:

从上图可以很容易看出:对于每一个节点而言,它的左节点的键值(具体的可以自定义,一般为key)比它本身的键值要小,右节点的键值比它本身的大。由此构成的二叉树就是一棵二叉查询树。如果我们用中序遍历的方式来遍历该树,可以得到一个按照键值有序排列的序列。在查找一个数据节点时,会从根节点开始,用当前节点的键值与给定的键值比对,如果相同,说明当前节点即为查找节点,如果小于当前节点键值,说明待查节点在当前节点的左子树中,进而便将右子树的节点排除了,提升了查找的效率。

红黑树

红黑树,这是一种比较复杂的数据结构,它是 JDK1.8以后中的 HashMap的底层数据结构的一个重要部分,在某些大厂的面试中也是经常出现,不知道有多少盆友都跪倒在它的脚下。

在这里插入图片描述

定义

红黑树是一种自平衡二叉查找树,它是基于二叉查找树设计的,具有比较高的查询效率。

性质

  • 每个节点只有红和黑两种颜色
  • 根节点是黑色的
  • 每个红色节点的两个子节点一定是黑色节点
  • 任意节点到每个叶子节点的路径包含的黑色节点的数量相同,俗称:黑高
  • 每个叶子节点都为黑色的(NIL)

节点(TreeNode)数据结构

private class TreeNode {Key key;// 键值Value value; // 数据项TreeNode left; // 左节点TreeNode right;// 右节点TreeNode parent;// 父节点int amount;		// 以该节点为子树的节点总数boolean color;	// 节点颜色
}

左右旋

这一部分是红黑树最难理解的部分,也是各面试官喜欢提到的点。首先要理解为哈要进行左右旋?

首先:这种操作主要是在更改树结构的时候发生,比如插入新的节点和删除一个节点,为了保证红黑树的完美平衡性,需要对树结构进行修改以满足这种要求。

这里,主要以插入来讲解一下左右旋。

首先,待插入的节点在初始化的时候,需要设置为红色。因为,如果我们以黑色的节点作为新节点插入到树中,必定会影响到树的结构,而且插入后的结构不满足红黑树的要求,必须进行旋转和变色来调整;反之,采用红色节点插入,可以避免一部分树结构调节。
在这里插入图片描述

虽说采用红节点作为插入节点的颜色,可以避免一定数量的树结构调节,但根据 两个红节点不能直接相连,仍然会出现需要调节树结构的情况。

比如上图的插入节点的键值为3时,这就是一个需要调节的情况。
在这里插入图片描述

左右旋情况分析
  • 情况一:左左(LL)

  • 情况二:左右(LR)

右旋


左旋

总之:在处理需要旋转的时候,我们都是把类型变为 LL 或者 RR 类型的处理。

欢迎关注公众号


http://chatgpt.dhexx.cn/article/932ftcyN.shtml

相关文章

Java——红黑树

概念 红黑树也是一种二叉搜索树,但是和avl树不同,它并不是依靠平衡因子来保证树的平衡的,而是通过颜色 红黑树每个节点中会存储颜色,分为红色和黑色,通过红黑树的限制条件,可以保证从根节点出发到叶子节点…

二叉树--红黑树

红黑树 定义 红黑树,顾名思义,就是树的节点只有红色和黑色两种状态,通过这两种状态的标识和规定颜色的使用,来使树达到相对平衡。为什么说相对平衡?因为在红黑树中,所有的条件限制只能保证,所…

二叉树之红黑树

红黑树 概述 为什么要有红黑树??? 特点 红黑规则 如何在红黑树上添加节点? (1)我们不妨假设加入的节点都是黑色 (2)如果我们加入的节点都是红色 红黑树添加节点后如何保持红…

红黑二叉树

红黑树 红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求: 节点是红色或黑色。 根节点是黑色。 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有…

红黑树-Java实现

目录 一、定义 二、插入 三、删除 四、全部代码 五、颜色效果 一、定义 红黑树是特殊的平衡二叉树,具有以下特性: 1、根节点的颜色是黑色 2、节点颜色要么是黑色、要么是红色 3、如果一个节点的颜色是红色,则它的子节点必须是黑色&…

红黑二叉树原理分析

1.引言 HashMap的基本结构是数组,链表和红黑树。以数组为基本形态,数组中的元素先以链表形式储存,当链表的长 度超过8时(包含数组上的那个链表头)就会将链表转换为红黑树,以加快修改和查询效率。当然除了H…

理解红黑树及代码实现

1.红黑树定义 红黑树是一颗 红-黑的平衡二叉树,它具有二叉树的所有特性,是一颗自平衡的排序二叉树.(树中任何节点值都大于左子节点的值,而且都小于右子节点的值),其检索效率高,它是一颗空树或它的左右两个子树高度差的绝对值不超过1,并且左右…

红黑二叉树的漫画讲解(轻松理解红黑二叉树原理)

———————————— 二叉查找树(BST)具备什么特性呢? 1.左子树上所有结点的值均小于或等于它的根结点的值。 2.右子树上所有结点的值均大于或等于它的根结点的值。 3.左、右子树也分别为二叉排序树。 下图中这棵树,就是…

Java的二叉树、红黑树、B+树

数组和链表是常用的数据结构,数组虽然查找快(有序数组可以通过二分法查找),但是插入和删除是比较慢的;而链表,插入和删除很快(只需要改变一些引用值),但是查找就很慢&…

二叉树与红黑树

二叉树的形成 二叉树是n(n>0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成 二叉树特点 由二叉树定义以及图示分析得出二叉树有以下特点&#xff1…

红黑树(C++实现)

文章目录 红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入红黑树的验证红黑树的查找红黑树的删除红黑树与AVL树的比较 红黑树的概念 红黑树是一种二叉搜索树,但在每个结点上增加了一个存储位用于表示结点的颜色,这个颜色可以是红色的,…

红黑二叉树详解及理论分析

发表于我的博客网站(prajna.top): http://prajna.top/doc/2/175 什么是红-黑二叉树? 红-黑二叉树首先是一颗二叉树,它具有二叉树的所有性质,是一种平衡二叉树。普通二叉树在生成过程中,容易出现不平衡的现象&#xff…

二叉树到红黑树

二叉树查找树 又叫二叉排序树。二叉查找树或者是一棵空树,或者是一棵具有如下性质的二叉树: 对于任何一个结点X若它的左子树非空,则左子树上所有结点的值均小于等于X的值;若它的右子树非空,则右子树上所有结点的值均大…

详解c++---红黑二叉树的原理和实现

目录标题 什么是红黑二叉树树红黑树的性质红黑树的效率分析红黑树的准备工作红黑树的insert函数节点的调整情况一情况二情况三 转换的实现打印函数find函数检查函数 什么是红黑二叉树树 avl树是通过控制平衡因子来控制二叉搜索树的平衡,当某个节点的平衡因子等于2或…

红黑树和二叉树有什么区别?

红黑树和二叉树有什么区别? 什么是二叉树?什么是红黑树? 二叉树(Binary Tree)是指每个节点最多只有两个分支的树结构,即不存在分支大于 2 的节点,二叉树的数据结构如下图所示 这是一棵拥有 6 …

二叉树系列:红黑树

介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了…

红黑树结构原理的图文讲解(非代码)

1.引言 HashMap的基本结构是数组,链表和红黑树。以数组为基本形态,数组中的元素先以链表形式储存,当链表的长度超过8时(包含数组上的那个链表头)就会将链表转换为红黑树,以加快修改和查询效率。当然除了Ha…

二叉树与红黑树见解

目录 一、红黑树简介二、 红黑树的特性三、红黑数的应用四、红黑树的原理实现4.1 识别红黑树4.2 红黑树节点的旋转4.3 插入节点4.3.1分情况讨论:4.3.2 代码示例 4.4删除节点相关引用 一、红黑树简介 红黑树是一种自平衡的二叉查找树,是一种高效的查找树…

什么是红黑树(内存最优的二叉树)

一.红黑树定义 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1…

【二叉树进阶】红黑树(Red Black Tree) - 平衡二叉搜索树

文章目录 一、红黑树的概念二、红黑树的性质2.1 红黑树和AVL树效率对比 三、红黑树的结构(KV模型)四、红黑树的插入4.1 插入节点4.2 平衡化操作(难点)4.2.1 情况一4.2.2 情况二4.2.3 情况三 4.3 总结 五、红黑树的验证六、红黑树的…