数据结构:二叉树、二叉查找树、平衡二叉树、红黑树

一个节点  =   一个对象   =  父节点地址值+数据值 +  左子节点地址值 +  右子节点地址值

度:每个节点的子节点数量;即:子节点数量(度)

二叉树中,任意一个节点的度(子节点数量)都要小于等于2

层  =  高度 

根节点:第一层节点

根节点的左子树节点:根节点左边的所有节点

更节电的右子树节点:根节点右边的所有节点

二叉树无序,查找时需要一个节点一个节点查
二叉查找数左小右大(可能导致一侧过长,不能保证平衡),查找层级比较大
平衡二叉树

左小右大,保持平均分布(查询时不用经过那么多层)

保持绝对平衡:左右两个子树的高度差不超过1(可等于1)

红黑树相对平衡,有自己的规则(不用经常触发旋转机制)

二叉树:(普通树)--无序的

树里的每一个元素称之为节点

每一个节点最多有两个子节点

二叉查找树:

(也称二叉排序树、二叉搜索树)

特点:

1.每个节点最多有2个子节点

2.每个节点的左子节点都小于自己

3.每个节点的右子节点都大于自己

存入节点规则:

1.小的存左边

2.大的存右边

3.一样的不存

平衡二叉树:

1.左右两个子树的高度差不超过1(可等于1)

2.任意节点的左右两个子树都是平衡二叉树(注意:是每一个节点)

当添加一个节点后,该树不再是一颗平衡二叉树

会触发机制:左旋、右旋

左旋:

只旋最外层,若旋后的根节点带左子节点,那左子节点会更左子树一一对比,小存左,大存右

右旋:

只旋最外层,若旋后的根节点带右子节点,那右子节点会更右子树一一对比,小存左,大存右

被旋转的四种情况:

左 左:右旋

左 右:左子树先左旋,最外层再右旋

右 右:左旋

右 左:右子树右旋后,最外层再左旋

左边这列字:根(左)(右)子树

右边这列字:以  根(左)(右)子树  的第一层作为根节点,在根节点的左子树添加,或在右子树添加

红黑树:

1.以前称为平衡二叉B树

2.每一个节点可以是红色可以是黑色

3.红黑树不是高度平衡的,它的平衡是通过“自己的红黑规则”实现

红黑规则:

1.每个节点或是红色,或是黑色

2.根节点必须是黑色

3.如果一个节点没有子节点或父节点,则该节点指针属性为nil(也称叶节点,都是黑色的)(nil可看左null)

4.如果某个节点是红色,那它的子节点必须是黑色的(不能出现两个红色节点相连情况)

5.对每个节点,从该节点到其所有后代叶节点的简单路径上(只能往前,不能回头),均包含相同数目的黑色节点

在节点上多了一个属性:颜色

一个节点  =   一个对象   =  父节点地址值+数据值 +  左子节点地址值 +  右子节点地址值+颜色

当添加3个全黑的节点,需要变动两次

当添加3个全红的节点,只需变动一次

所以,添加节点时,默认红色,效率更高

父节点为黑色,无需任何操作

其父节点为红色,叔叔也是红色

1.将叔父变黑

2.将祖父变红

3.若祖父为根节点,则再次变黑

其父节点为红色,叔叔为黑色(叔叔为nil节点也算黑色)

1.将父变黑

2.祖父变红色

3.以祖父为支点进行旋转(旋转时,nil节点可以忽略,都是null可以不看)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值