1.二叉查找樹是一種含有附加屬性的二叉樹,即其左孩子小於父結點,父結點小於或等於右孩子數據結構
2.一棵由n個結點隨機構造的二叉查找樹的高度爲lgn,因此瓜熟蒂落,二叉查找樹的通常操做的執行時間爲O(lgn)。但二叉查找樹若退化成了一棵具備n個結點的線性鏈後,則這些操做最壞狀況運行時間爲O(n)學習
操做 說明 addElement 往樹中添加一個元素 removeElement 從樹中刪除一個元素 removeAllOccurrences 從樹中刪除所指定元素的任何存在 removeMin 刪除樹中的最小元素 removeMax 刪除樹中的最大元素 findMin 返回一個指向樹中最小元素的引用 findMax 返回一個指向樹中最大元素的引用
3.鏈表實現二叉查找樹:每一個BinaryTreeNode中的對象要維護一個指向結點存儲元素的引用,還要維護指向結點的每一個子樹的引用字體
1.自己首先是一棵二叉查找樹。帶有平衡條件:每一個結點的左右子樹的高度之差的絕對值(平衡因子)最多爲1。設計
1.本質上是一棵二叉查找樹,但它在二叉查找樹的基礎上增長了着色和相關的性質使得紅黑樹相對平衡,從而保證了紅黑樹的查找、插入、刪除的時間複雜度最壞爲O(log n)調試
2.根結點爲黑色。code
3.每一個葉子結點(null)是黑色。對象
4.從樹根到樹葉的每條路徑都包含有一樣數目的黑色結點(黑鍵數)。rem
5.若是一個結點的顏色爲紅色,那麼它的子結點一定是黑色。input
6.在紅黑樹中,元素的查找仍然是一種O(n)操做,因爲紅色結點不能有紅色孩子,因而路徑中至多有一半結點時紅色結點、至少有一半結點是黑色結點,據此咱們能夠論證紅黑樹的最大高度約爲2*logn,因而遍歷最長路徑的序仍然是logn。(即最長遍歷路徑相同。)博客
1.添加或刪除紅黑樹中的節點以後,紅黑樹就發生了變化,可能不知足紅黑樹的5條性質,也就再也不是一顆紅黑樹了,而是一顆普通的樹。而經過旋轉,可使這顆樹從新成爲紅黑樹。簡單點說,旋轉的目的是讓樹保持紅黑樹的特性。
2.當一棵樹的最大路徑長度大於log2^n,或最小路徑長度小於log2^n-1時,就要平衡化該樹。當左子樹過長,則對左子樹進行右旋,若右子樹過長,則對右子樹進行左旋。若左子樹的右子樹過長,進行左右旋。若右子樹的左子樹過長,進行右左旋。對X進行左(右)旋,意味着"將x變成一個左(右)節點"。
1.對於平衡樹插入後不平衡的狀況,通旋轉使樹達到平衡。
2.在討論紅黑樹的插入操做以前必需要明白,任何一個即將插入的新結點的初始顏色都爲紅色。這一點很容易理解,由於插入黑點會增長某條路徑上黑結點的數目,從而致使整棵樹黑高度的不平衡。但若是新結點父結點爲紅色時(以下圖所示),將會違返紅黑樹性質:一條路徑上不能出現相鄰的兩個紅色結點。這時就須要經過一系列操做來使紅黑樹保持平衡
3.紅黑樹插入元素後,先旋轉爲平衡二叉樹,然後根據紅黑樹的五條性質對結點進行染色。
問題1:在作藍墨雲實驗的時候,創立了input文件後始終出現filenotfound的異常。
問題1解決方案:詢問了趙乾晨同窗後,發現本身的input文件始終沒有標註位置。