前邊的資料結構都是一對以的關係,而樹是一種一對多的關係。
樹的定義方法也是很有意思的,是一種遞迴的定義方法,就是套娃,樹的定義裡又用了樹的定義。樹的定義是這樣的:
樹是n個節點的有限集,當n=0時,稱為空樹,非空樹滿足:
1)有且僅有乙個為根的結點
2)其餘結點可分為m個不相交的有限集,每個集合本身也是一棵樹,稱為根的子樹。
樹是一種邏輯結構,我們可以根據樹的定義得到樹的一些特點,比如說,除了根結點外,所有結點有且只有乙個前驅,但是可以有零個或多個後繼,因為是一對多的關係。
樹是分層的資料結構。
這是乙個四層的樹,所以這顆樹的高度為4。
從根結點到乙個結點的唯一路徑上的任意乙個結點,都叫做這個結點的祖先結點,比如說g結點,a結點到g結點的路徑是abdg,那b結點就可以說是g結點的祖先,g就是b的子孫。這條路徑上與g最相鄰的上乙個結點d叫做g的雙親,那g自然就是d的孩子結點,有的結點有很多個孩子結點,比如b就有d和e兩個孩子結點,d和e有相同的雙親,那d和e就是兄弟結點,g和h也是兄弟。
乙個結點的孩子數量稱為結點的度,比如說b,d的度為2,c的度為1,f的度為0。所以結點的最大度樹就是這個樹的度。圖中的這個樹度數就是2,結點最大的度就是2。
這些有孩子的結點,或者說度大於0的結點稱為分支結點,,有時候也叫非終端結點,因為還有孩子,所以不是終端,而那些度為0的結點,叫葉子結點,也可以叫終端結點。但是我覺得還是分支結點和葉子結點比較順口。
d和e的雙親和f的雙親是兄弟,那d,e,和f也應該是有血緣關係的,所以d,e和f互為堂兄弟。
還有乙個定義叫深度和高度,分別是從不同方向來看的,乙個結點的深度是從根結點自頂向下累加,乙個結點的高度是從葉結點自底向上累加,至於說樹,高度深度都是一樣了,就看這個樹一共有多少層了,但是這個地方有很多地方描述的不一樣,有的書上認為根結點在第0層,有的認為根結點在第1層,這個就看怎麼定義的了。
樹還分有序樹和無序樹,顧名思義,有序樹就是位置確定的樹,左右孩子結點是不可以換位置的,換了位置就不是同一顆樹了,無序樹就是從左到右是沒有順序的,比如說這個g和h可以交換位置,交換之後根以前還是相同的樹。
樹中的兩個結點之間的路徑就是說從這個結點到另乙個結點需要經過哪些結點,經過的邊的個數就是路徑長度。
還有乙個概念叫森林,這個也很容易理解,就是很多棵樹,把一棵樹的根結點去掉就成了森林。比如像這樣。
樹的結點樹等於所有的結點的度數加1。
這個是為什麼,度數就相當於是上乙個結點的分支對不對,但是這樣的話根結點沒有算在裡面,所以要所有結點的度數加1。
二叉樹是個很重要的一種樹形結構,簡單來說就是每個結點最多只能有兩棵子樹,因為是二叉,而且二叉樹是有順序的,所以它的左右子樹不能隨便交換。
下面說幾個比較特殊的二叉樹,第乙個是滿二叉樹。
滿二叉樹,顧名思義,就是每一層都是滿的,它的葉子結點都在最下面那一層,除了葉子結點,每個結點都有兩個孩子結點。一顆高度為h的二叉樹一共有2^h - 1個結點。比如說這個樹,一共有四層,2的四次方減1,二的四次方是16,減1,是15個。
還有一種樹叫完全二叉樹,完全二叉樹不一定是滿的,但是它只要存在的點都和已有的滿二叉樹對應。
比如說這個就是乙個完全二叉樹。
但是如果最後乙個葉子結點在右邊,就不是。
還有一種二叉樹叫二叉排序樹,是排序用的。二叉排序樹的特點是左子樹上所有的關鍵點都比根結點的關鍵字小,右子樹的所有關鍵子都比根結點大。至於左右子樹,也滿足這個條件。
還有一種樹叫平衡二叉樹,平衡二叉樹指的是樹上任一結點的左右子樹的深度的差都不會超過1。
下面講一下二叉樹的遍歷,二叉樹的遍歷一般分為四種,前序遍歷,中序遍歷、後序遍歷和層次遍歷。
這裡的前中後序的序是指的跟結點的訪問次序。
前序遍歷是先訪問根結點,然後遍歷左子樹,然後遍歷右子樹。同樣它們的左右子樹也是按照這個順序遍歷。
中序遍歷是先中序遍歷根結點的左子樹,然後訪問根結點,最後是中序遍歷右子樹。
後序遍歷就是最後遍歷根結點。
層次遍歷就比較簡單了,就是按層從左到右依次訪問。
有的時候我們需要將樹轉換成二叉樹方便處理。
轉換的步驟是什麼呢。
首先在所有兄弟結點之間加一條線,然後對每個結點,只留下它與第乙個孩子的連線。然後每個結點的第乙個孩子是左孩子,兄弟結點變成自己的右孩子。
那森林怎麼轉換成二叉樹呢,先把每棵樹按前面的規則轉換為二叉樹,而且我們已經知道,按照上面的規則轉換成的二叉樹的二叉樹右子樹一定是空的,所以第二棵樹構成的二叉樹可以作為第一棵樹構成的二叉樹的右子樹,同理,第三棵可以作為第二棵的右子樹,以此類推,森林就構成了二叉樹。
最後講一下哈夫曼樹。
要知道什麼是哈夫曼樹,首先要知道乙個概念,就是權。在很多時候,結點會被賦予乙個表示某種意義的數值,從樹的根結點到任意結點經過的邊數乘以權值,稱為該結點的帶權路徑長度,所有結點的帶權路徑長度之和稱為該樹的帶權路徑長度。
在含有n個帶權葉結點的二叉樹中,帶權路徑長度最小的二叉樹稱為哈夫曼樹。
資料結構筆記 樹
2017.12.22 1.順序查詢 a 建立哨兵 2.二分法查詢 binary search a 有序連續儲存在陣列 b 邊界錯位 if left right 查詢失敗 c 時間複雜度logn 1.判定樹上每個結點需要查詢次數剛好為該結點所在層數 2.查詢成功時查詢次數不會超過判定樹的深度 3.as...
資料結構筆記 樹
一 樹的定義樹 n n 0 個結點的有限集合。當n 0時,稱為空樹 任意一棵非空樹滿足以下條件 有且僅有乙個特定的稱為 根的結點 當n 1 時,除根結點之外的其餘結點被分成m m 0 個 互不相交 的有限集合t1 t2,tm 其中每個集合又是一棵樹,並稱為這個根結點的子樹。樹的定義是採用遞迴方法。二...
資料結構筆記(樹)
經過線性表 包括幾種特殊的線性表 的學習,對資料的儲存和處理已經有了初步認識,關於樹的邏輯結構學習有總結如下 一 樹的定義 採用遞迴方法 樹 n n 0 個結點的有限集合。當n 0時,稱為空樹 任意一棵非空樹滿足以下條件 1 有且僅有乙個特定的稱為根的結點 2 當n 1時,除根結點之外的其餘結點被分...