二叉树以及红黑树

1.聊聊树

树得基本特性
1.每个结点有多个或者零个子结点
2.没有父结点的结点就是根结点(就是老大),没有子结点就是叶结点(最小的小弟)
3.每一个非根结点只有一个父结点(就是上面这个人)

 我的个人理解  就是A就是根节点也是Boss,BCD(非跟结点)就是帮助头上大哥管理小弟,本来很潇洒,但它头上还有一个大哥。KLHIJ就是最小的小弟也叫叶结点

2.关于二叉树的规则

1.二叉树就是度不超过2的树,其每个结点最多有两个子结点
2.二叉树的结点分为左结点和右结点,假如没有右节点,也要分左右结点

有人要问了:为啥B结点下面的子结点只有一个,为什么不像右结点有两个,因为BC结点下面的子结点都是两个的话  那这就是下面的满二叉树了

 3.关于满二叉树的规则

1.二叉树的每一层的结点度都达到最大值,就是有两个子结点,则这个二叉树就是满二叉树
2.一棵深度为n的满二叉树,有2^n-1个结点

4.关于完全二叉树

对一棵具有n个结点的二叉树按层序排号,如果编号为i的结点与同样深度的满二叉树编号为i结点在二叉树中位置完全相同,就是完全二叉树。

可以理解为结点或者叶子结点是按顺序来的树,但无不能有缺失

 例如 从 1到10的排序  其中少了1,2个数字 者就不是完全二叉树

树1,按层次编号5结点没有左子树,有右子树,10结点缺失。树2由于3结点没有字数,是的6,7位置空挡了。树3中结点5没有子树。 就像我说的 他们缺少了结点树,所以不是完全二叉树

 

这就是一个完全二叉树

5.红黑树满足的规则

1.根结点必须是黑色的
2.每个红色节点的两个子节点都是黑色。( 即: 不能有两个连续的红色节点 )
3.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点

 关于红黑树的变色以及左自旋以及右自旋的讲解

1.首先我们要知道 每次新插入的元素结点是为红色的

2.上面规则也说了 :不能有两个连续的红色结点

我们先看正常的红黑树  不需要自旋的时候

 关于红黑树的变色以及自旋

1.我们插入6这个元素时,发现它的父结点7是红色,不满足规则。这里就判断是需要变色还是自旋

它的父结点7是红色,叔结点13也是红色,我们就需要先变色处理,(如果叔结点是黑色,我们就需要自旋,后面步骤)把父结点7和叔结点13变为黑色,把祖结点变为红色,如下图

 2.我们发现祖结点12与它的上结点5冲突了,我们考虑是变色还是自旋,我们发现结点12它的父结点是5,但叔叔结点1是黑色,并且以结点12为跟结点的子树是结点5的右子树,符合自旋的情况,以结点5进行左旋(如果说是左子树,就进行右旋)

我们左旋之后得到上图,发现当前结点5与它的父结点12冲突了,且叔叔13结点为黑色,开始右旋上面说过(怎么看左旋与右旋) ,得到下图

6.红黑树总结 

首先是规则

1、每个节点都有红色或黑色

2、树的根始终是黑色的

3、没有两个相邻的红色节点

4、从节点(包括根)到其任何后代NULL节点(就是叶子结点下方挂的两个空节点),

这么简单来理解变色与自旋吧

首先我们插入一个元素,绝对是红色的,这个是绝对的,不可能为黑色,除非你自己改源码。

我们能去找它的父级  看是什么颜色的,还要看上面的叔结点是什么颜色的,如果父结点与叔结点都是红色,则先需要变色,如果父结点为黑色,就不需要变色自旋,如果父结点是红色,叔结点是黑色,我们就需要自旋。其实吧这就是一层一层往上面套娃的形式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~渊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值