常见数据结构

以下是以前看视频做的笔记。

先进后出,后进先出

队列 

先进先出,后进后出 

数组

查询快,增删慢 

链表

查询慢,增删快(相对数组而言)

当要根据数值找元素时,就都是一样的,都是从头开始找

但是,当根据索引来找时,双向链表比较快,因为假如n离头近可以从头开始找,若离尾近则从尾找开始找

二叉树

二叉树:任意节点的度都小于等于2

遍历方式

前序遍历

当前 --> 左 --> 右

中序遍历

是按从小到大的顺序遍历的,因此最重要

左 --> 当前 --> 右

后续遍历

左 --> 右 --> 当前

层序遍历

从第一层开始,一层层地遍历

二叉查找树

二叉查找树:一颗二叉树,左子树的所有节点都比当前节点小,右子树所有节点的值都比当前节点大,查找效率高

添加节点

查找节点

查找效率挺高的

中序遍历

二叉查找树最重要的是中序遍历,因为基于二叉查找树的规则,可以实现从小到大遍历

左 --> 当前 --> 右

二叉查找树的弊端

添加一些数据时,可能会出现以上的情况,会导致查询的效率非常低,就跟链表一样

平衡二叉树

为了解决二叉查找树的弊端,提出了平衡二叉树,就是在二叉查找树的基础上多了一条规则:任意节点的左子树和右子树的高度差不能超过1,重点是任意,所有节点的左右子树高度差都不能超过1

保持平衡的手段:

左旋

例1:

例2:

先找支点,从新添加的节点开始往上找,第一不平衡的父节点就是支点,然后将支点”左旋“,就是支点降级,支点的右子节点升级,替代原来支点的位置,此时支点成为原来的右子节点的左子节点

变为

右旋

例1:

例2:

先找支点,从新添加的节点开始往上找,第一不平衡的父节点就是支点,然后将支点”右旋“,就是支点降级,支点的左子节点升级,替代原来支点的位置,此时支点成为原来的左子节点的右子节点

总而言之,左旋就是支点变左子节点,右旋就是支点变右子节点

触发旋转的四种情况

左左

左左:当根节点的左子树的左子树添加节点导致不平衡,进行一次右旋即可

左右

左右:局部左旋,然后整体右旋

右右

右左

红黑树

红黑树是一种特殊的二叉查找树,通过”红黑规则“实现平衡

平衡二叉树的弊端是每插入一个节点,如果导致了不平衡就会旋转,影响效率

红黑规则

添加节点

默认添加红色的节点,因为效率高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值