快速理解二叉树和红黑树

二叉树就是结点相连形成的一种结构,是用来解决哈希冲突的有效方法链表会很长,那么就会导致查询效率就低了。

根据key的hash值来计算出来的位置可能是相同的,如果同一个元素放在同一个位置过多的话,查询就会很麻烦,需要用到二叉树。

1.1 二叉树的基本概念

二叉树(Binary tree)是树形结构的一个重要类型。

 二叉树特点是每个结点最多只能有两棵子树,且有左右之分。

1.1 二叉树的遍历

  • 前序遍历:中左右(根左右)

  • 中序遍历:左中右(左根右)

  • 后序遍历:左右中(左右根)

前序遍历:ABDHIECFG

中序遍历:HDIBEAFCG

后序遍历:HIDEBFGCA

1.3 经典二叉树

1、满二叉树: 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。 第n层的结点数是2的n-1次方,总的结点个数是2的n次方-1

2、完全二叉树: 叶结点只能出现在最底层的两层,且最底层叶结点均处于次底层叶结点的左侧。

3、平衡二叉树:平衡二叉树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树, 但不要求非叶节点都有两个子结点 。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。例如红黑树的要求:

  • 节点是红色或者黑色

  • 根节点是黑色

  • 每个叶子的节点都是黑色的空节点(NULL)

  • 每个红色节点的两个子节点都是黑色的。

  • 从任意节点到其每个叶子的所有路径都包含相同的黑色节点数量。

当我们插入或删除节点时,可能会破坏已有的红黑树,使得它不满足以上5个要求,那么此时就需要进行处理:

1、recolor :将某个节点变红或变黑

2、rotation :将红黑树某些结点分支进行旋转(左旋或右旋)

使得它继续满足以上以上的5个要求。

 

 例如:插入了结点21之后,红黑树处理成:

 

在链表里什么时候形成红黑树结构呢:

当同一个位置的元素满足8,并且列表长度大于6,再增加时就会形成红黑树型结构 。

哈希表的table数组的默认长度是16,之后扩容都是2倍扩容,永远是2的n次方。同一个位置元素达到8时,长度没到64就会产生扩容。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值