(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)性质:
①每个节点的颜色不是黑色,就是红色
②根节点是黑色
③如果一个节点是红色,那么它的两个子节点就是黑色(没有连续的红节点)
④对于每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑色节点