怎么说它是LL型呢?

因为:
因为它们成为另一棵树的左子叶节点和右子叶节点,且该树的根是它们的频率之后(:11),根将被插入到优先级队列中,现在有两棵huffman树:。针对这个问题,vm_area_struct还添加了vm_avl_hight(树高)、vm_avl_left(左子节点)、vm_avl_right(右子节点)三个成员来实现avl树,以提高vm_area_struct的搜索速度。这里可能会有的一个问题是:b有左右两个子节点分别为d和e,为什么右旋的时候要将右子节点e拿到a的左子节点而不是b的左子节点d。
2、 刚刚插入的值(无论是8还是8.5或7.5)都比10的左孩子要小(根据二叉排序树的性质就可以知道,刚插入的节点位于9的左边所以一定比9小),为什么跟9比较呢?因为第一步已经确定是LX型啦!

除去调整红黑树的部分,其余的都很简单,就是搜索二叉树的插入过程,这个应该都比较熟悉涩(数据结构中有学的哟),这里面的插入节点,使用的是循环的方式,如果不考虑性能,还可以用递归的方式,用递归的方式简洁明了,当插入节点后,可能破坏了红黑树的结构,因此需要进行红黑树的平衡调整操作fixafterinsertion,这部分就有点复杂了,因此如果光看代码肯定意义是不大的,必须结合图解来分析,因为我在前面已经分析过了红黑树的部分,这里就不继续贴图了,我把地址贴出来,可以参考着一起看,记住一定要结合图解来看,否则看不懂就不是我的锅了。这样,我们可以得到用分离集合树实现的改进实现“逻辑判定”和“加入关系”的算法如下[ 设分离集合为disjointset,合并两棵树的操作为disjointset.union(a, b)、a, b为树根,获取节点信息的操作为disjointset.findroot(a ,var ra, var ga),这里返回的ra为a所在树的树根,ga为a对于树根的相对关系属性。8 查找结构:符号表,二叉查找树,二叉查找树的查找、插入和删除操作,avl树,高度平衡,ll, lr, rr, rl 旋转, 插入算法,时间复杂性分析,b树,m叉查找树,m叉查找树的查找,b树的定义和性质,b树的插入操作,b树的删除操作,静态散列,散列表,散列函数,溢出处理,开放寻址,链接。
为啥这是LR型呢?因为:
1、 10的左子树(也就是以8为根的子树)比10的右子树高。
2、 新插入的节点(无论是9还是9的子孙们)都比10的左孩子,也就是8要大(这一点根据二叉排序树的特点就可以知道,8的右子树一定比8大!!!!),为啥要跟8比较呢??因为第一步已经确定是LX型啦!!!(已经解释了两遍了,后面不解释啦!!!)

其中8为最小非平衡树的根节点,9或者9的子孙为刚刚插入的节点
为啥是RL型呢??因为:
1、 8的右子树(也就是以10为根的子树)的高度比左子树高
2、 刚插入的节点值,无论是9还是9的子孙都比8的右孩子(10)大!!!

其中8为最小非平衡树的根节点,10或者10的子孙为刚刚插入的节点。
为啥是RR型???因为:
1、 8的右子树比左子树高
2、 刚插入的值(10或10的子孙)比9大!!
首先,我们重点关注的就是那三个带圈圈的节点!!!
归并排序是稳定的排序.即相等的元素的顺序不会改变.如输入记录1(1)3(2)2(3)2(4)5(5)(括号中是记录的关键字)时输出的1(1)2(3)2(4)3(2)5(5)中的2和2是按输入的顺序.这对要排序数据包含多个信息而要按其中的某一个信息排序,要求其它信息尽量按输入的顺序排列时很重要.这也是它比快速排序优势的地方.。例如:7画“丽贡志芙吾”的排列.上下形汉字的排序要遵循——按“上偏旁”笔画数由少到多的顺序排定之原则。判断一个问题是否为排列问题的依据是是否与顺序有关,与顺序有关且是从n个不同的元素中任取m个(m≤n)不同元素的问题就是排列问题,否则就不是排列的问题,而检验一个问题是否与顺序有关的依据就是变换不同元素的位置,看其结果是否有变化,若有变化就与顺序有关,就是排列问题。
第三,调整后,三个带圆圈的节点的分布形态是一个三角形

根据二叉排序树的性质可知,这三个节点中左子最小,根居中,右子最大。
了解了以上几点后,我们讲调整的步骤。
首先我们要确定三个节点的大小关系,大的用big表示,小的用small,不大不小的用middle表示。拿LL类型为例:


接下来开始调整:
1、 确定small、big、middle三个节点(就是上面的那个步骤)
2、 分配middle的左右子树给big和small
3、 将small和big作为middle的左右子树
4、 将parent指向middle,也就是将middle作为调整后的子树的根(注意如果最小非平衡子树的根节点是整棵树的根节点,那么此时parent为NULL,这是需要改变整棵树的树根为调整后的树根,也就是middle)
什么?还是有点懵?没关系,开始具体到每个类型,咱有四个类型要重复这些步骤呢,还怕搞不清?!
LL型:

步骤:
1、 确定big、middle和small(根据二叉排序树的性质确定)
我们假设最小非平衡子树的根节点,也就是10节点为unbalance,则
big = unbalance; middle = unbalance->l_tree; small = unbalance->l_tree->l_tree;
2、 将middle的左右子树分配给big和small
供选择的答案: a:①是特殊的树②不是树的特殊形式③是两棵树的总称④是只有二个根结点的树形结构 b:①左子结点②右子结点③左子结点或者没有右子结点 ④兄弟 c~d: ①最左子结点②最右子结点③最邻近的右兄弟④最邻近的左兄弟⑤最左的兄弟⑥最右的兄弟e:①o(n)②o(n)③o(log2n)④o(log2n) 15、每一棵树都能唯一地转换为它所对应的二叉树,树的这种二叉树表示对树的运算带来很大的好处。枕芯本体由上到下包括子枕芯外层和子枕芯填充层,子枕芯外层和子枕芯填充层之间通过纽扣或者粘扣带连接,子枕芯外层包括三个外左子枕芯、外中子枕芯以及外右子枕芯,外左子枕芯、外中子枕芯以及外右子枕芯依次相连接。[0023]为保证智能手环的外观时尚感,连接件3应占据空间较小,而在较小的空间内确保分别与左、右按键3.2,3.4 一体的左、右卡勾3.3,3.5与智能主体2的卡槽2.2的准确、快速配合比较困难,为解决此问题,本实施例中在左、右按键3.2,3.4上还设置有导向柱3.2.2,3.4.2,在连接件主体3.1上对应设有两个导向槽3.1.2,装配时左、右按键3.2,3.4除其凸柱3.2.1,3.4.1嵌入连接件主体3.1的第一嵌槽3.1.1内外,其导向柱3.2.2,3.4.2插设在连接件主体3.1的导向槽3.1.2内,对左、右按键3.2、3.4的按压运动起到导向作用,进而保证了左、右卡勾3.3、3.5与卡槽2.2的配合准确。
big->l_tree = middle->r_tree;
3、 将small和big分别作为middle的左右子树
对于LL型,调整前small已经是middle的左子了,small不用调整
middle->r_tree = big;
4、 将middle作为调整后的根节点,也就是将middle作为parent的孩子
这里要分情况:
a)如果parent为空,那么middle作为整棵树的树根,也就是root=middle
b)如果parent不为空且unbalance为parent的左子,就将middle作为parent的左子
c)如果parent不为空且unbalance为parent的右子二叉排序树 插入,就将middle作为parent的右子。
LR型:


1、 确定big、middle和small(根据二叉排序树的性质确定)
我们假设最小非平衡子树的根节点,也就是10节点为unbalance,则
big = unbalance; small = unbalance->l_tree; middle = unbalance->l_tree->r_tree;
2、 将middle的左右子树分配给big和small
分配原则是,将middle的左子作为small的右子,将middle的右子作为big的左子
small->r_tree = middle->l_tree;
big->l_tree = middle->r_tree;
3、 将small和big分别作为middle的左右子树
middle->l_tree = small;
middle->r_tree = big;
4、 将middle作为调整后的根节点,也就是将middle作为parent的孩子
这里要分情况:(对于这一步,四种情况的做法都一样,所以后面就不重复啦!!!!!)
a)如果parent为空,那么middle作为整棵树的树根,也就是root=middle
b)如果parent不为空且unbalance为parent的左子,就将middle作为parent的左子
c)如果parent不为空且unbalance为parent的右子,就将middle作为parent的右子。
RL型:

1、 确定big、middle和small(根据二叉排序树的性质确定)
我们假设最小非平衡子树的根节点,也就是10节点为unbalance,则
small = unbalance; big = unbalance->r_tree; middle = unbalance->r_tree->l_tree;
2、 将middle的左右子树分配给big和small
分配原则是,将middle的左子作为small的右子,将middle的右子作为big的左子
small->r_tree = middle->l_tree;
big->l_tree = middle->r_tree;
3、 将small和big分别作为middle的左右子树
middle->l_tree = small;
middle->r_tree = big;
4、 将middle作为调整后的根节点,也就是将middle作为parent的孩子

这里要分情况:(对于这一步,四种情况的做法都一样,所以后面就不重复啦!!!!!)
RR型:

1、 确定big、middle和small(根据二叉排序树的性质确定)
我们假设最小非平衡子树的根节点,也就是10节点为unbalance,则
small =unbalance; middle = unbalance->r_tree; big = unbalance->r_tree->r_tree;
2、 将middle的左右子树分配给big和small
供选择的答案: a:①是特殊的树②不是树的特殊形式③是两棵树的总称④是只有二个根结点的树形结构 b:①左子结点②右子结点③左子结点或者没有右子结点 ④兄弟 c~d: ①最左子结点②最右子结点③最邻近的右兄弟④最邻近的左兄弟⑤最左的兄弟⑥最右的兄弟e:①o(n)②o(n)③o(log2n)④o(log2n) 15、每一棵树都能唯一地转换为它所对应的二叉树,树的这种二叉树表示对树的运算带来很大的好处。枕芯本体由上到下包括子枕芯外层和子枕芯填充层,子枕芯外层和子枕芯填充层之间通过纽扣或者粘扣带连接,子枕芯外层包括三个外左子枕芯、外中子枕芯以及外右子枕芯,外左子枕芯、外中子枕芯以及外右子枕芯依次相连接。[0023]为保证智能手环的外观时尚感,连接件3应占据空间较小,而在较小的空间内确保分别与左、右按键3.2,3.4 一体的左、右卡勾3.3,3.5与智能主体2的卡槽2.2的准确、快速配合比较困难,为解决此问题,本实施例中在左、右按键3.2,3.4上还设置有导向柱3.2.2,3.4.2,在连接件主体3.1上对应设有两个导向槽3.1.2,装配时左、右按键3.2,3.4除其凸柱3.2.1,3.4.1嵌入连接件主体3.1的第一嵌槽3.1.1内外,其导向柱3.2.2,3.4.2插设在连接件主体3.1的导向槽3.1.2内,对左、右按键3.2、3.4的按压运动起到导向作用,进而保证了左、右卡勾3.3、3.5与卡槽2.2的配合准确。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-108009-2.html
怎么想都觉得可怕