第七章 查找 六、平衡二叉树

目录

一、定义

二、最小不平衡子树

1、平衡方法

2、查找效率

三、插入、删除操作

平衡二叉树的插入操作:

平衡二叉树的删除操作:

1、例子1

(1)若我们要删除9

(2)若我们要删除55

2、例子2

​编辑


一、定义

平衡二叉树是一种特殊的二叉树,具有如下性质:

  1. 它是一棵空树,或者它的左右两个子树的高度差的绝对值不超过 1,并且其左右两个子树都是平衡二叉树。

  2. 对于任意节点,它的左右两个子树的高度差都不超过 1。

平衡二叉树的主要作用是保持树的平衡,以确保操作的时间复杂度是 O(logn) 级别的。平衡二叉树的常见实现包括 AVL 树和红黑树等。

二、最小不平衡子树

1、平衡方法

(1)LL左孩子右旋

(2)RR右孩子左旋

(3)LR左孩子的右孩子先左后右

(4)RL右孩子的左孩子先右后左

2、查找效率

三、插入、删除操作

平衡二叉树的插入操作:

插入新结点后,要保持二叉排序树的特性不变(左<中<右)

若插入新结点导致不平衡,则需要调整平衡;

平衡二叉树的删除操作:

删除新结点后,要保持二叉排序树的特性不变(左<中<右)

若删除新结点导致不平衡,则需要调整平衡;

1、例子1

(1)若我们要删除9

从9开始往上寻找不平衡子树;

没有找到,就直接删除,不用调整平衡。

(2)若我们要删除55

在上面这个例子中,孙子在爷爷的右边的右边,所以为RR的情况。

把儿子进行左单旋,得到。

2、例子2

(1)若我们要删除32

我们找到44为最小不平衡子树的根结点

找到个头最高的儿子,和孙子

孙子在爷爷的右边的左边,为RL的形式

所以我们将孙子50先右旋再左旋,得到

相关推荐
琢磨先生David10 小时前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
qq_4542450311 小时前
基于组件与行为的树状节点系统
数据结构·c#
超级大福宝11 小时前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
岛雨QA12 小时前
常用十种算法「Java数据结构与算法学习笔记13」
数据结构·算法
weiabc12 小时前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
wefg112 小时前
【算法】单调栈和单调队列
数据结构·算法
岛雨QA13 小时前
图「Java数据结构与算法学习笔记12」
数据结构·算法
czxyvX13 小时前
020-C++之unordered容器
数据结构·c++
岛雨QA13 小时前
多路查找树「Java数据结构与算法学习笔记11」
数据结构·算法
AKA__Zas13 小时前
初识基本排序
java·数据结构·学习方法·排序