04_map、set与平衡二叉搜索树、RBTree

(2条消息) 种树:二叉树、二叉搜索树、AVL树、红黑树、哈夫曼树、B树、树与森林_看,未来的博客-CSDN博客

map和set都是关联式容器,其底层的实现都是RBTree(红黑树),

1、map

(1)map是一种字典的数据结构

(2)map底层是以RBTree作为容器

(3)所有元素在map中都是以键+值的形式存在

(4)不允许键重复,所有元素都是通过键直接排序的

(5)不允许键的修改,但是键对应的值可以修改

(6)可以支持下标操作,set不支持下标操作,map可以选择key作为下标,也可以用运算符[ ]执行查找,如果关键码不存在,则插入一个具有改关键码和mapped_type类型默认值的元素至map中,因此下标运算符需要慎用

2、set

(1)set是一种集合数据结构

(2)set底层是以RETree作为容器

(3)set只有键;此时键就是值,值就是键

(4)不允许键重复,所有元素都是通过键直接排序

(5)不允许通过迭代器来修改set的值

set中如果允许修改值的话,首先要删除该键,在调节平衡,然后插入修改后的键值,在调节平衡,这样会严重破坏了set的结构,导致迭代器失效

3、平衡二叉搜索树(AVL)

(1)定义:它要么是一棵空树,要么是满足左子树和右子树深度之差(平衡因子)的绝对值不超过1并且它的左子树和右子树都是一棵平衡二叉树的二叉排序树。(它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。)

(2)条件:①必须是二叉查找树 ②每个节点的左子树和右子树高度差不超过1

例子:

左边的二叉树的节点45左子树高度为2,右子树高度为0,左右子树高度差为2-0=2,不满足条件②

右边的二叉树节点满足二叉搜索树,也满足左右子树高度差不大于1

??什么是二叉搜索树呢??

1)定义:满足一下条件的二叉树

①若它的左子树不空,则左子树上所有节点均小于它的根节点的值

②若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值

(3)AVL树的查找、插入、删除操作在平均和最坏的情况下都是O(logn),得益于它每时每刻都维护着二叉树的平衡。

4、RBTree

(1)定义:红黑树是一棵二叉搜索树,每个节点增加了一个保存节点颜色的存储位;可以是红(Red)或黑(Black);红黑树是AVL树的变种,红黑树通过一些着色法则确保没有─条路径会比其它路径长出两倍,因而达到接近平衡目的。

(2)性质:

①每个节点的颜色不是黑色,就是红色

②根节点是黑色

③如果一个节点是红色,那么它的两个子节点就是黑色(没有连续的红节点)

④对于每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑色节点

这里写图片描述

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值