一.樹
樹是非線性結構,其中的元素組織為乙個結構層次。而之前的集合(棧、佇列及鍊錶)都是線性資料結構,即他們的元素可以乙個接乙個排列。樹(tree)是有一組邊(edge)夠構成,結點用來儲存元素,邊表示結點之間的連線。
如下圖所示,書中較低一層的結點稱為其前一層結點的子節點(children),乙個結點只能有乙個父結點,但乙個結點可以有多個子結點,有相同結點的結點稱為兄弟結點(sibling)。根結點是樹中唯一沒有父結點的結點。沒有任何子結點的結點稱為葉結點(leaf)。至少乙個子結點的非根結點稱為內部結點(internal node)。 樹中構成另一棵樹結構的部分稱為子樹(subtree)從根的路徑上,位於上面的頂點是其下方頂點的祖先(ancestor),根是樹中所有結點的最終祖先,從乙個結點沿路徑可以到達的結點稱為它的後繼(decendant)。結點的層是從根到該結點的路徑長度(path length)。
樹可以按很多方式分類,其中一種方法是按樹中任意結點的最大子結點個數來分,這個值有時稱為數的度(order)
另一種分類方法是看樹是否平衡,如果樹的所有子結點都在同一層上,或彼此最多不超出一層,則認為樹是平衡的。
有m個元素的平衡n叉樹的高度是lognm。每個結點最多有兩個子結點的樹稱為二叉樹。如果樹的所有葉結點都在同一層,並且每個非葉結點都正好有n個子結點,則稱n叉樹是滿的(full);如果樹是滿的,或一直到倒數第二層都是滿的且最底層的所有葉結點都位於樹的左側,則稱樹是完全的(complete)。如下圖左邊的樹是完全樹,但不是滿的,右邊的樹即是完全的,也是滿的。
二. 樹的遍歷
進行層序遍歷時可用佇列來儲存樹中的元素樹的遍歷有4中方法:
三.樹的實現策略
數的基於陣列的儲存鏈實現方式可以佔據陣列中的連續位置,不管樹是不是完全樹模仿作業系統記憶體管理的方法,不是根據元素在樹中的位置來指定它在陣列中的儲存位置,而是採用先來先服務的策略將它們分配在陣列的一片連續位置中。陣列的每個元素是乙個物件,它儲存指向樹中元素的引用及每個子結點所在的陣列下標。在下圖中,假定進入樹的次序假定是a、c、b、e、d、f。a左下標為2,即b在陣列中的位置,右下標為1,即c在陣列中的位置。如果乙個結點沒有子結點,那麼它對應的下標為-1。
當需要將樹結構直接儲存到硬碟中時,也可以採用這一策略。這種情況下,陣列下標不再作為指標使用,每個結點儲存的是它的子結點在檔案中的相對位置,這樣給定檔案的頭位址後,就可以計算偏移量。
四.二叉樹與決策樹
如何在一般二叉樹中新增及刪除元素,要取決於樹的用途。
使用決策樹可以設計專家系統決策樹(dcision tree)的結點表示判定點,結點的孩子表示那一刻可用的選擇,決策樹的葉結點表示根據選擇得到的結論。
專家系統(expert system)是表示特定領域專家知識的一種軟體系統
我寫的乙個簡單的決策樹如下圖
五.性質
二叉樹的性質,若二叉樹的根節點位於第1層:
完全二叉樹的性質,
(statistics.sh指令碼的執行結果截圖)
不停地奔赴,尋找最初的夢想,理清層層苦憂,鎖定展望方向,才能解開迷團澆開迷霧,終有乙個滿意的歸宿。有句話說的好「」流水千觴,光陰有限,趁著陽光初早,明媚如鮮,我們還處於人生的最好時期,真情面對各自的美好前程,踏實履行堅定的腳印,才會不枉此生,綻放璀璨的光輝「希望我的**能力能夠對得起我不懈的努力,最後恭祝十九大勝利召開。
**行數(新增/累積)
部落格量(新增/累積)
學習時間(新增/累積)
重要成長
目標5000行
400小時
第一周188
1/125
演算法分析
第二週70/258
1/215/40
《構建之法》7-9章
第三週474/732
1/320/60
查詢和排序
第四五六周
1313/2045
4/712/72
棧和佇列
第七周2203/2935
1/814/86
樹第八周
(有空多看看現代軟體工程 課件 軟體工程師能力自我評價表)
20162320劉先潤大二第6周學習總結
佇列元素按fifo的方式處理 最先進入的元素最先離開 佇列是儲存重複編碼k值的一種有效結構。實現模擬時常用佇列來表示等待的一列 教材實現方法 首先建立customer類,記錄了顧客到達的時間及買完票後離開的時間,離開時間減去到達時間就是顧客買票所花費總時間,然後ticketcounter模擬這個場景...
20162320劉先潤大二第3周學習總結
線性查詢,從一端開始以線性的方式掃瞄找池。下圖是我繪製的乙個說明圖 二分查詢,借助查詢池中資料的有序性,每次從中間開始查詢,即每次比較都會將物件的範圍縮小一倍,排除了一半的可行候選資料。選擇排序 反覆地將乙個個具體的值放到它最終的有序位置,從而完成一組值的排序。我的理解 每一次從將要排序的資料中選出...
20162320劉先潤第5周學習總結
statistics.sh指令碼的執行結果截圖 上週部落格互評情況 關於課程程式學習的經驗感悟 1.要理解教材上的程式,一定要掌握單詞的意思。比如程式5.11中reciprocal,denominator,我第一次學習時直接忽略了這個單詞意思跳躍學習,結果花了很多時間都看不懂,終於去查了字典,其意思...