数据结构

数据结构

数组
特点:

1,使用前要预先分配空间,先指定数组长度,内存地址连续。
2,可以使用数组下标访问成员,查询效率高。
3,增删会带来系统性能消耗。保证数组下标越界问题,需要动态扩容。

链表
单向链表
双向链表
特点:

1,存储空间不要求连续,空间要求灵活
2,不支持下标访问,查询需要顺序遍历
3,增删效率高,只需要操作目标节点的前后节点,无需移动元素


二叉树

特点:

1,节点的左子树的节点小于该节点
2,节点的右子树的节点大于该节点
3,左右子树也都是二叉查找树
4,顺序排列(中序遍历)

不平衡二叉树查询效率不高,极端情况等于链表的查询效率,我们可以通过去除顶端优势让不平衡二叉树变成平衡二叉树。提高查询效率。

红黑树
红黑树 Red-Block Tree 是一个自平衡的二叉查找树,树上的节点满足如下的规则

1,每个节点要么是红色,要么是黑色
2,叶子节点必须是黑色
3,叶子节点是黑色
4,每个红色节点的两个子节点必须是黑色
5,任意节点到每个叶子节点的路径包含相同数量的黑节点

实现方式

1,recolor 重新标志节点颜色
2,rotation 旋转 树达到平衡的关键

红黑树自平衡实现方式

左旋:以某个节点作为支点(旋转节点),其右子节点变为旋转节点的父节点,右子节点的左子节点变为旋转节点的右子节点,左子节点保持不变。
右旋:以某个节点作为支点(旋转节点),其左子节点变为旋转节点的父节点,左子节点的右节点变为旋转节点的左节点,右子节点保持不变。
变色:节点颜色由黑变红或由红变黑。

插入场景
1,树为空

插入节点作为根节点,设置为黑节点

2,插入节点的父节点为黑节点

直接插入

3,插入节点的父节点为红节点

叔叔节点为红色

1,将父节点和叔叔节点设置为黑色
2,将祖父节点设置为红色
3,将祖父节点设置为当前插入节点(在套用一次规则)

叔叔节点不存在或者为黑色
	父节点是左节点
		插入节点是父节点的左节点

1,将父节点设置为黑色
2,将祖父节点设置为红节点
3,祖父节点右旋

		插入节点是父节点的右边节点

1,父节点左旋
2,把父节点设置为插入节点,得到上面的场景
3,套用上面的规则

	父节点是右节点
		插入节点是父节点的右节点

1,将父节点设置为黑色
2,将祖父节点设置为红色
3,祖父节点镜像左旋

		插入节点是父节点的左节点

1,父节点进行右旋
2,把父节点设置为插入节点,得到上面的场景
3,套用上面的规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值