1、概述php
一、什么是二叉查找树:二叉查找树是一种带有附加属性的二叉树,即对树中的每一个结点,其左孩子都要小于其父结点,而父结点又小于或等于其右孩子。html
二、二叉查找树的定义是二叉树定义的扩展。java
三、操做:git
操做 | 描述 |
---|---|
addElement | 往树中添加一个元素 |
removeElement | 从书中删除一个元素素 |
removeAllOccurrences | 从树中删除所指定元素的任何存在 |
removeMin | 删除树中的最小元素 |
removeMax | 删除树中的最大元素 |
findMin | 返回一个指向树中最小元素的引用 |
findMax | 返回一个指向树中最大元素的引用 |
2、用链表实现二叉查找树web
过程:若是这个树为空,则新元素就将成为根结点。若是树非空,这个新元素会与树根元素进行对比。算法
(1)若是它小于根结点中存储的那个元素且根的左孩子为null,则这个新元素就将成为根的左孩子。数据结构
(2)若是这个新元素小于根结点中储存的那个元素且根的左孩子不是null,则会遍历根的左孩子,并再次进行比较操做。学习
图解:
ui
二、removeElement操做spa
过程:
(1)若是被删除结点没有孩子,则replacement返回null。
(2)若是被删除结点只有一个结点,则replacement返回这个孩子。
(3)若是被删除结点有两个孩子,则replacement会返回中序后继者(由于相等元素会放到右边)
图解:
3、用有序列表实现二叉查找树
操做 | LinkedList | BinarySearchTreeList |
---|---|---|
removeFirst | O(1) | O(log n) |
removeLast | O(n) | O(log n) |
remove | O(n) | O(log n)* |
first | O(1) | O(log n) |
last | O(n) | O(log n) |
contains | O(n) | O(log n) |
isEmpty | O(1) | O(1) |
size | O(1) | O(1) |
add | O(n) | O(log n)* |
注:*add操做和remove操做均可能致使树变的不平衡
4、平衡二叉树
一、下图显示了获得的二叉树,这个结果二叉树看做是一颗蜕化树,看起来更像是一个链表,而事实上,它的效率比链表还低。
八、综上所述,平衡化树的通常性办法,其中自树根而下的路径最大长度必须不超过log2 n,并且自树根而下的路径最小长度必须不小于(log2 n)-1。
5、实现二叉查找树:AVL树
删除结点的实例图:
public class A{//定义类A } public class B extends A{//定义类B,继承类A }
则,类A就是超类或父类,类B叫子类
问题2:涉及红黑树的问题,对于咱们你们都是一个难点,因此在教材问题中将红黑树具体来写一下:
问题2解决方案:
(1)首先,咱们须要了解到红黑树表明的是什么:红黑树是一种平衡二叉查找树,其中的每一个结点存储一种颜色(红色或黑色,一般用一个布尔值来实现,值false等价于红色)。控制结点颜色的规则以下:
1.根结点为黑色。
2.红色结点的全部孩子都为黑色。
3.从树根到树叶的每条路径都包含一样数目的黑色结点。
(2)咱们了解到在某种程度上,红黑树中的平衡限制没有AVL树那样的严格。可是,它们的序仍旧是log n。
1.红黑树的时间复杂度为: O(lgn)
2.下面经过“数学概括法”对红黑树的时间复杂度进行证实。
3.定理:一棵含有n个节点的红黑树的高度至多为2log(n+1).
将一个节点插入到红黑树中,须要执行哪些步骤呢?首先,将红黑树看成一颗二叉查找树,将节点插入;而后,将节点着色为红色;最后,经过旋转和从新着色等方法来修正该树,使之从新成为一颗红黑树。详细描述以下:
一、第一步: 将红黑树看成一颗二叉查找树,将节点插入。
二、第二步:将插入的节点着色为“红色”。
三、第三步: 经过一系列的旋转或着色等操做,使之从新成为一颗红黑树。
(5)红黑树中元素删除:
instanceof
错题1:
The best comparison sort in terms of order is:
A .O(1)
B .O(n)
C .O(log(n))
D .O(nlog(n))
正确答案: D 个人答案: C
解析:由于我认为线性排序确定会快一些,可是具体时间复杂度,我以前查过资料,不一样的数据类型下,时间复杂度不必定有最快的。
错题2:
What is the time complexity of a Quick sort?
A .2logn
B .logn
C .nlogn
D .n^2
正确答案: C 个人答案: B
解析:快速排序法的时间复杂度理解不透彻。
错题3:
After one pass on the numbers ( 5 3 9 5 ), what would be the result if you were to use Bubble Sort?
A .5 3 5 9
B .5 5 3 9
C .3 5 5 9
D .9 5 5 3
正确答案: C 个人答案: A
解析:我只将最大的给冒上去了,忘记考虑还有其余的。
代码调试中的问题和解决过程, 一个问题加1分
这一周很显然的感受到本身时间很不够用,可能本身对于时间的分配仍是有些不合理,老是作了些浪费时间的事情,也发现本身如今的时间观念没有过去那样很强了,但愿本身能够常常检讨,本身为何会作事愈来愈慢。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 0/0 | 1/1 | 6/6 |
第二周 | 1313/1313 | 1/2 | 20/26 |
第三周 | 901/2214 | 1/3 | 20/46 |
第四周 | 3635/5849 | 2/4 | 20/66 |
第五周 | 1525/7374 | 1/5 | 20/86 |
第六周 | 1542/8869 | 2/5 | 25/111 |
第七周 | 1391/10260 | 1/6 | 20/131 |
蓝墨云班课
Java程序设计
红黑树之原理和算法实现
java中instanceof的用法和实战
AVL树(平衡二叉树)
AVL树算法思想和代码实现
AVL树的旋转图解和简单实现