1-12 二叉查找树与AVL树

本文详细介绍了二叉查找树的基本概念及其查找、插入操作,并深入探讨了AVL树作为平衡二叉树的特点及其实现平衡的旋转方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 定义

一棵空树,或者是具有下列性质的二叉树

(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3)左、右子树也分别为二叉排序树;

(4)没有键值相等的结点。

 

二叉查找树(Binary Search Tree),又叫:二叉搜索树,二叉排序树

1.2 查找

步骤:

若根结点的值等于查找的值,成功

若小于根结点的值,递归查左子树;

若大于根结点的值,递归查右子树;

若子树为空,查找不成功。

1.3 插入

首先执行查找算法,找出被插结点的父亲结点(比较被插入值与结点的值)。

判断被插结点是其父亲结点的左、右儿子。

将被插结点作为叶子结点插入。

二叉树为空,则首先单独生成根结点。

2 AVL树(平衡二叉树)

2.1 简介

AVL树是最先发明的自平衡二叉查找树在AVL树中任何节点的两个子树的高度差的绝对值不超过1所以它也被称为高度平衡树

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。

2.2 定义

AVL树本质上还是一棵二叉查找树,它的特点是:

  1. 本身首先是一棵二叉查找树。
  2. 带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。

也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)。

2.3 旋转

旋转的目的:是为了实现在插入新的结点之后,实现二叉树的再平衡。

平衡二叉树有4种旋转方式:

  1. 单旋转-左旋
  2. 单旋转-右旋
  3. 双旋转-左右(先左旋后右旋)
  4. 双旋转-右左(先右旋后左旋)

右旋转

修改parent和curLR的孩子指针域

root = parent -> parent

1 修改parent的指针域 

parent -> left = curLR

//避免出现左单支的场景

curLR -> parent = parent

2 修改curL的指针域

curL -> right = parent

curL -> parent = root

 

双旋转-左右

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值