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樹的旋轉圖解和簡單實現