為什麼需要樹結構?
1.陣列儲存方式的分析
優點:通過下標方式訪問元素,速度快。對於有序陣列,還可使用二分查詢提高檢索速度。
缺點:如果要檢索具體某個值,或者插入值(按一定順序)會整體移動,效率較低。
2.鏈式儲存方式的分析
缺點:在進行檢索時,效率仍然較低,比如(檢索某個值,需要從頭節點開始遍歷) 。
3.樹儲存方式的分析
能提高資料儲存,讀取的效率, 比如利用二叉排序樹(binary sort tree),既可以保證資料的檢索速度,同時也可以保證資料的插入,刪除,修改的速度。
樹的順序儲存
順序儲存二叉樹應用例項
八大排序演算法中的堆排序,就會使用到順序儲存二叉樹, 關於堆排序,我們放在《樹結構實際應用》 章節講解
先序遍歷、中序遍歷、後序遍歷
線索二叉樹
樹的鏈式儲存
先序遍歷、中序遍歷、後序遍歷
二叉查詢樹是一種查詢效率非常高的資料結構,它有三個特點。
每個節點最多只有兩個子樹。
左子樹都為小於父節點的值,右子樹都為大於父節點的值。(左《父《右)
在n個節點中找到目標值,一般只需要log(n)次比較。
二叉查詢樹的結構不適合資料庫,因為它的查詢效率與層數相關。越處在下層的資料,就需要越多次比較。極端情況下,n個資料需要n次比較才能找到目標值。
對於資料庫來說,每進入一層,就要從硬碟讀取一次資料,這非常致命,因為硬碟的讀取時間遠遠大於資料處理時間,資料庫讀取硬碟的次數越少越好。
1.廣度優先遍歷
英文縮寫為bfs即breadth firstsearch。其過程檢驗來說是對每一層節點依次訪問,訪問完一層進入下一層,而且每個節點只能訪問一次。
對於上面的例子來說,廣度優先遍歷的 結果是:a,b,c,d,e,f,g,h,i(假設每層節點從左到右訪問)。 先往佇列中插入左節點,再插右節點,這樣出隊就是先左節點後右節點了。
廣度優先遍歷樹,需要用到佇列(queue)來儲存節點物件,佇列的特點就是先進先出。
2.深度優先
英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。
對於上面的例子來說深度優先遍歷的結果就是:a,b,d,e,i,c,f,g,h.(假設先走子節點的的左側)。 深度優先遍歷各個節點,需要使用到棧(stack)這種資料結構。
stack的特點是是先進後出。整個遍歷過程如下: 先往棧中壓入右節點,再壓左節點,這樣出棧就是先左節點後右節點了。
有沒有發現其實就是『根』的位置發生了改變,前就是『根』在前,中在中,後在後。
一、先序遍歷
二、中序遍歷
三、後序遍歷
1.輸出檔名稱的過程如下:
如果是資料夾,先輸出資料夾名,然後再依次輸出該資料夾下的所有檔案(包括子資料夾),如果有子資料夾,則再進入該子資料夾,輸出該子資料夾下的所有檔名。這是乙個典型的先序遍歷過程。
2.統計資料夾的大小過程如下:
若要知道某資料夾的大小,必須先知道該資料夾下所有檔案的大小,如果有子資料夾,若要知道該子資料夾大小,必須先知道子資料夾所有檔案的大小。這是乙個典型的後序遍歷過程。
3.中綴表示式轉為字尾表示式(逆波蘭表示式)。
中綴表示式是乙個通用的算術或邏輯公式表示方法。符合人類的邏輯(例:3 + 4)
字尾表示式是一種不需要括號的表達法。符合計算機的邏輯(例:3 4 +)
第6章 樹和二叉樹
6.1 樹的定義和基本術語 樹型結構是一種非常重要的非線性資料結構,其中以樹和二叉樹最為常用,直觀來看,樹是以分支關係定義的層次結構。樹在計算機領域得到廣泛應用,如在編譯程式中,可用樹型結構來表示源程式的語法結構。在資料庫系統中,樹型結構也是資訊的重要組織形式之一。樹是n n 0 個結點的有限集。在...
第5章 樹和二叉樹
1.樹是一類重要的非線性資料結構,樹形結構是以分支關係來定義的層次結構。在客觀世界中樹形結構廣泛存在,並應用於 人類社會的族譜 家譜 行政區域劃分管理 各種社會組織機構 在計算機領域中,用樹表示源程式的語法結構 在作業系統 os 中,檔案系統 目錄等組織結構也是用樹來表示的。本章的主要內容是 樹的邏...
第5章 樹和二叉樹
線性結構的資料元素是一對一的關係。非線性結構 樹形結構和圖狀結構。樹形結構是一對多的非線性結構,資料元素之間既有分支關係,又有層次關係。樹形結構由樹和二叉樹兩種,樹的操作實現比較複雜,但樹可以轉換為二叉樹進行處理。5.1樹 5.1.1樹的定義 樹 tree 是n個相同型別的資料元素的有限集合。樹中的...