数据结构-树的类别

以下对数结构进行归类和简单说明,主要针对Java面试中常见的树结构进行概括。

定义:不包含回路的连通无向图

满足三个特性:
①不包含回路
②两个节点之间有且只有一条路径连通
③一棵树有N个节点,那一定有n-1条边

二叉树

含义:含义每个节点只有两个子节点的树,时间复杂度为O(log n)

完全二叉树

含义:二叉树的高度为h时,1~h-1层的节点数达到最大数,第h层从左往右连续缺少节点的二叉树

满二叉树

含义:每个叶子节点都存在同等深度的的完全二叉树

含义:实质上就是完全二叉树,是一种满足父节点的值比子节点大(或者满足子节点的值比父节点的大)的完全二叉树
最小堆:父节点的值比子节点小
最大堆:子节点的值比父节点大

二叉查找树

含义:左子树所有的值小于等于父节点,右子树所有的值大于等于父节点,并且子树已排序

红黑树

含义:是一种特殊二叉查找树,也是不完全平衡的平衡二叉树。为了避免二叉查找树变成线性结构(树的深度过大),使用红黑树来保持插入节点时平衡每个子节点的节点数量。红黑树从根节点到叶子节点的最长路径不会超过最短路径的2倍。

使用场景: Java的集合中,TreeMap、TreeSet、HashMap(JDK 1.8)以红黑树实现

红黑树必须满足以下五点原则:

根节点是黑色
节点是红色或黑色
每个叶子节点都是黑色空节点(NIL节点)
从根节点到子节点的所有路径不能有连续的红色节点
从任一节点到其每个叶子的所有路径都包含相同数量的黑色节点

当新增节点时,破坏了红黑树的规则,则需要经过调整使其符合红黑树的五条原则。可以通过“变色”和“旋转”来调整二叉树。其中旋转分为左旋转和右旋转。左旋转,即右子树需要变动的旋转;右旋转,即左子树需要变动的旋转

插入新节点示例:

初始红黑树结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上仅以简单的案例说明红黑树是如何保持自平衡,理解红黑树对节点数据的处理过程。

红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。相比其他二叉树具有更高的性能。

参考资料:
二叉树 http://wiki.jikexueyuan.com/project/easy-learn-algorithm/binary-tree.html
红黑树 https://zhuanlan.zhihu.com/p/31805309

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值