樹
以前沒有好好學數據結構現在需要補回來欠的賬還是要還的。
不知道大家喜不喜歡看權利的遊戲個人還是十分推薦看!十分好看!!!
看上圖這麼多人物如果你想要找某個人是不是很奔潰!!!
假如這個人自身含有一些信息。
假如你找的人是 “小惡魔” 提利昂·蘭尼斯特(個人非常喜歡他)
蘭尼斯特家族,父親是泰溫蘭尼斯特,母親是喬安娜蘭尼斯特,姐姐是瑟曦·蘭尼斯特,哥哥是詹姆·蘭尼斯特。有了這些條件查找是不是特別快!!
那樹有什麼作用呢?
權利的遊戲的家譜圖按血緣關係族類記載,這樣管理查找人是不是特別快!!!
所以樹最大的作用就是查找!
樹的定義
定義參考https://blog.csdn.net/forwardyzk/article/details/53926282
樹是n(n>=0)個結點的有限集合.當n=0時,集合爲空,稱爲空樹.在任意一顆非空樹中,有且僅有一個特定的結點稱爲根.當n>1時,除根結點以外的其餘結點可分成m(m>=0)個不相交的有限結點集合T1,T2….Tm.其中每個集合本身也是一棵樹,稱爲根的子樹.
其中:
(1)有且僅有一個稱爲根的結點:它沒有前繼結點,有0個或者多個後繼結點.
(2)有若干個稱爲葉的結點:它們有且僅有一個前幾節點,而沒有後繼結點.
(3)其餘稱爲節的結點:它們有且僅有一個前繼結點,至少有一個後繼結點.
實際上,樹表示了一組結點之間不同於線性表的前繼和後繼關係的數據結構.一般而言,樹種任何一個結點只有一個前繼(根結點除外),可以有多個後繼(葉結點除外).
爲什麼樹主要講的是二叉樹???
如下圖一個樹怎麼表示呢?
如下圖這樣可以表示,但是如果有些結點的度是3、4、5那又怎麼表示呢?結點又怎麼定義呢?
孩子兄弟表示法來了
結點表示
調整一下
所以孩子兄弟表示法可以用二叉樹表示任何樹,這應該就是樹這一章重點爲什麼講二叉樹吧!
二叉樹
二叉樹定義
二叉樹 T:一個有窮的結點集合。這個集合可以爲空。若不爲空,則它是由兩棵互不相交的、分別稱爲根結點的左子樹和右子樹的二叉樹組成。
五種基本形態
- 空二叉樹
- 只有一個根結點
- 根結點只有左子樹
- 根結點只有右子樹
- 根結點既有左子樹又有右子樹。
二叉樹的子樹有左右順序之分
特殊二叉樹
斜二叉樹
滿二叉樹
每層都結點都滿
完全二叉樹
有n個結點的二叉樹,對樹中結點按從上至下、從左到右順序進行編號,編號爲 i(1≤i ≤n) 結點與滿二叉樹中編號爲 i 結點在二叉樹中位置相同
二叉樹幾個重要性質
- 一個二叉樹第 i 層最大結點數爲:2^(i-1), i≥1
- 深度爲k的二叉樹有最大結點總數爲:2^k -1, k≥1
- 對任何非空二叉樹T,若 n0 表示葉結點的個數、n2 是度爲 2 的非葉結點個數,那麼兩個滿足關係 n0=n2+1
證明 n0=n2+1
假如在二叉樹中 n0 表示葉結點個數,n1 表示度爲 1 的結點個數,n2 表示度爲 2 的結點個數。因爲邊數+1 等於結點數。
n1+2*n2+1=n0+n1+n2,所以 n0=n2+1
二叉樹存儲
順序存儲
鏈式存儲
結點
二叉樹遍歷
先序、中序、後序、按層遍歷
請看我這篇 二叉樹遍歷
總結
參考 數據結構ZJU 陳越姥姥
主要介紹了下樹的一些基礎知識,後面會再寫 BST、AVL、RBT 等樹。 以前沒好好學,欠的賬還是要還的,好好打基礎,多問爲什麼?
才學疏淺,有什麼問題請大家指出來。十分感謝!