二叉查找樹是二叉樹的擴展,它絕大數方法都會用到遞歸,二叉查找樹的平均查找深度爲O(log2N).html
if (!(element instanceof Comparable))
,若是不是則會拋出NoComparableException
comparaTo()
方法與TargetElement進行比較,ElemenNotFoundException
.沒有左右子節點,能夠直接刪除這個結點。好比刪除結點20.
java
removeAllOccurrences、removeMin、removeMax、findMax、findMin方法都在:LinkedBinarySearchTree類git
樹的使用實現集合會讓有些操做變得高效,也會讓一些操做變得低效:數據結構
操做 | LinkList | BinarySearchTreeList |
---|---|---|
removeFirst | O(1) | O(n) |
removeLast | O(n) | O(n) |
remove | O(n) | O(n) |
first | O(1) | O(n) |
last | O(n) | O(n) |
contains | O(n) | O(n) |
isEmpty | O(1) | O(1) |
size | O(1) | O(1) |
add | O(n) | O(n) |
黑色加粗表明使用樹後操做將變得低效。學習
紅色字體表明該操做可能使樹變得不平衡。字體
紅黑樹的查詢性稍微遜色於AVL樹,由於它比AVL樹會稍微不平衡多一層,也就是說他會比AVL樹多進行一次比較。ui
結論來自這!.net
String1.comparaTO(String2)...
,也就是隻能比較String類型。要想比較其餘類型,就得寫一個比較器,其中用Compara(T value1,T value2)方法。一:當添加已有結點時,後來的數據之間覆蓋原來的數據,有可能人說這個沒有用,在我看來,當一個節點有兩個數據時,這就變得很是有用,好比這兩個數據是:name、price。設計
已有的數據爲:name:牛奶 、price:2元
後來的數據爲:name:牛奶 、 price:2.5 元
通常來講、在實際生活中的應用一個節點會有不少數據,因此通常不會所有相同的。所以更新尤其重要。3d
二:在書中代碼上,數據不會更新的。相同的元素會放在原元素的右結點上,當放上比他小的元素時,會存在於它的第一個出現的結點的左節點上。
- 隊友對於本身不懂得問題懂得深究,好比同窗、百度。 - 隊友的事比我多、學習java的效率比我高。 - 隊友很細心、可以發現一些小問題。
在上一章中,我說那一章很難。如今想是我錯了!這個十一章是難的我腦袋都疼!特別是那個AVL、紅黑樹,哎。我得看代碼去了····
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 260/0 | 1/1 | 05/05 | |
第二週 | 300/560 | 1/2 | 13/18 | |
第三週 | 212/772 | 1/4 | 21/39 | |
第四周 | 330/1112 | 2/7 | 21/60 | |
第五週 | 1321/2433 | 1/8 | 30/90 | |
第六週 | 1024/3457 | 1/9 | 20/110 | |
第七週 | 900/4357 | 1/9 | 20/130 |