二叉树:
i层(i>=1), 第i 层最多2的i-1次方节点,总节点最多为2的i次方-1
满二叉树:全满 完全二叉树:全满的基础上顺序减少了一部分。
顺序存储:如通过0表明此节点不存在元素,下标为0存储根节点
链式存储:数据,左右指针
遍历:
先序遍历二叉树:先中间节点(根节点),先序遍历左子树,先序遍历右子树
中序:中序遍历左子树,根节点,中序遍历右子树
后序:后序遍历左子树,后序遍历右子树,根节点
层次遍历:按照树的层次自上而下
线索二叉树:链式存储中,n个节点,2n个指针域,n-1个指针域被使用(根节点无指针域指向),n+1个指针域空闲
考虑使用空闲指针域存放某种遍历顺序下当前节点的前驱或后继。增加两标志位,ltag表示lchild存放左子节点还是前驱,
rtag右子节点还是后继。

哈夫曼树(最优二叉树):当用 n 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,树的带权路径长度(WPL)最小,原则上权重越大的结点离树根越近
节点的带权路径长度:节点的权重乘以根节点到此节点的路径长度
树的带权路径长度:所有叶子节点的带权路径长度之和。
在这里插入图片描述
WPL = 7 * 1 + 5 * 2 + 2 * 3 + 4 * 3

构建过程:最小2,4,构建二叉树,根节点权重为6(2+4),最小5,6,构建二叉树,根为11,以此类推
在这里插入图片描述

哈夫曼编码:最少的字符包含最多的信息内容。

在这里插入图片描述
字符 a 用到的次数最多(权重最大),其次是字符 b 。字符 a 在哈夫曼编码是 0 ,字符 b 编码为 10 ,字符 c 的编码为 110 ,字符 d 的编码为 111 。如000011010 为aaaacb

二叉排序/搜索/查找树:左子树全小于等于根,右子树全大于等于根,左,右子树也为二叉排序树
构建二叉排序树:一个一个插入,插入和查找思路一样的
中序遍历二叉排序树可得到从小到大的有序数组
删除:叶子节点直接删,只含单边子树用单边子节点代替自己,含双子树的用中序遍历的前驱或后继节点代替自己。

平衡二叉搜索树(AVL树):左右两个子树的高度差的绝对值不超过1,且左右子树都是平衡二叉树
节点的平衡因子:节点左子树高度减右子树高度
左旋:插入后导致节点平衡因子小于等于-2
(1)节点的右孩子替代此节点位置
(2)右孩子的左子树变为该节点的右子树
(3)节点本身变为右孩子的左子树
右旋类似
左右旋:先左旋,后右旋
在这里插入图片描述
右左旋
在这里插入图片描述

在这里插入图片描述
实现:红黑树,AVL算法… 区分AVL树和AVL算法

红黑树:1根黑,2叶子节点是黑色的nil节点(和我们通常说的叶子节点不一样),3红的子节点为黑,4任一节点到其下所有叶子节点(nil)含相同数目的黑色节点(下图从80节点到所有叶子节点都含3),最短路径全黑,最长路径红黑交替,相差不超过2倍。时间复杂度O(lgn),因为一棵含n个节点的红黑树的高度至多为2log(n+1).
在这里插入图片描述
插入:找到插入位置,涂红色,问题(可能违背红的子节点为黑这个原则),若违背需修正(旋转和重新着色)
如何修正(叔叔可能为nil黑节点)
1 叔叔为红,(爸,叔改黑,爷爷改红)保证特性4,然后处理爷爷(如60节点)
在这里插入图片描述
2 叔叔为黑,当前节点为右子节点(7节点),父节点(2)为当前节点,左旋
在这里插入图片描述在这里插入图片描述

3 叔叔(14)为黑,当前节点为左子节点,(父黑,爷爷改红,以爷爷为支点右旋),最后如下图
在这里插入图片描述
删除:先作为二叉搜索树删除,
1 无子节点 2 一个子节点 3 双子节点(所在位置改为前驱或后继的值,不过颜色不变,删除前驱或后继),转换为1或2
删除红色的情况1,直接删,红色的情况2(不存在)
删除黑色的情况1:复杂, https://www.cnblogs.com/qingergege/p/7351659.html
删除黑色的情况2:即黑+单红子节点,用子节点替换,并修改子节点为黑。

查找:用key找value,会不会有多个呢(非唯一索引),
m阶 m-1关键字,m个子树
B树:
1 根节点至少有两个子节点(至少1个关键字)
2 非根结点至少有Math.ceil(m/2)-1个关键字,ceil向上取整
3 关键字左子树小于它,右子树大于它(没有等于,意味着不存在单key对应多value)
3 叶子节点位于同一层
非叶子节点存储 key value pointer

B+树: 在B树上扩展
1内部(索引)节点和叶子节点,根节点可以是内部或叶子节点
2 数据都放于叶子节点
3 内部节点key左子树小于它,右子树大于等于它 (举例:非叶节点含key15,右子树叶节点含key15和对应value,此外还可以含多个key15和对应value,如非唯一索引),索引节点的key值均会出现在叶子节点中。
4 叶子节点链接,单链表
非叶子节点存储 key pointer,没有value非叶子节点可以存放更多key
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值