ε=(´ο`*)))唉,注定只能是个码农了,算法一高深,就晕html
可是JDK8后不少底层集合开始改用红黑树,了解一点知识吧算法
这是基础知识.net
https://blog.csdn.net/yuwushuang11/article/details/78628071htm
度:指的是一个节点拥有子节点的个数。如二叉树的节点的最大度为2。blog
深度:数的层数,根节点为第一层,依次类推。排序
叶子节点:度为0的节点,即没有子节点的节点。get
树:树中的每个节点,能够有n(后续节点)个子节点,可是每一个节点只有一个前驱节点。基础
二叉树:除了叶子节点外,每一个节点只有两个分支,左子树和右子树,每一个节点的最大度数为2.二叉树
满二叉树:除了叶结点外每个结点都有左右子叶且叶结点都处在最底层的二叉树,方法
彻底二叉树:只有最下面的两层结点度小于2,而且最下面一层的结点都集中在该层最左边的若干位置的二叉树。
也就是说,在满叉树的基础上,我在最底层从右往左删去若干节点,获得的都是彻底二叉树。
因此说,满二叉树必定是彻底二叉树,可是彻底二叉树不必定是满二叉树
平衡二叉树:树的左右子树的高度差不超过1的数,空树也是平衡二叉树的一种。
平衡二叉树,又称AVL树。它或者是一棵空树,或者是具备下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1.。
平衡二叉树的调整方法
平衡二叉树是在构造二叉排序树的过程当中,每当插入一个新结点时,首先检查是否因插入新结点而破坏了二叉排序树的平衡性,如果,则找出其中的最小不平衡子树,在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的连接关系,进行相应的旋转,使之成为新的平衡子树。
哈夫曼树:带权路径长度达到最小的二叉树,也叫作最优二叉树。
不关心树的结构,只要求带权值的路径达到最小值,哈夫曼树多是彻底二叉树也多是满二叉树。
二叉树的性质:
(1) 在二叉树中,第i层的结点总数不超过2^(i-1);
(2) 深度为h的二叉树最多有2^h-1个结点(h>=1),最少有h个结点;
(3) 对于任意一棵二叉树,若是其叶结点数为N0,而度数为2的结点总数为N2,
则N0=N2+1;
(4) 具备n个结点的彻底二叉树的深度为int(log2n)+1
(5)有N个结点的彻底二叉树各结点若是用顺序方式存储,则结点之间有以下关系:
若I为结点编号则 若是I<>1,则其父结点的编号为I/2;
若是2*I<=N,则其左儿子(即左子树的根结点)的编号为2*I;若2*I>N,则无左儿子;
若是2*I+1<=N,则其右儿子的结点编号为2*I+1;若2*I+1>N,则无右儿子。
(6)给定N个节点,能构成h(N)种不一样的二叉树。
h(N)为卡特兰数的第N项。h(n)=C(n,2*n)/(n+1)。
主要看
https://www.cnblogs.com/xuxinstyle/p/9556998.html
https://www.jianshu.com/p/e136ec79235c
R-B Tree简介
R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每一个节点上都有存储位表示节点的颜色,能够是红(Red)或黑(Black)。
红黑树的特性:
(1)每一个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每一个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)若是一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的全部路径上包含相同数目的黑节点。
注意:(01) 特性(3)中的叶子节点,是只为空(NIL或null)的节点。(02) 特性(5),确保没有一条路径会比其余路径长出俩倍。于是,红黑树是相对是接近平衡的二叉树。