這是本次學習的第二個資料結構:樹。
之前我們一直討論的是一對一的線性結構,無論是線性表也好,棧和佇列也罷,都是2p模式。
可是現實生活中,3p、4p等現象比比皆是,例如乙個年輕的媽媽生了4個孩子,而每個孩子都不像他們的爸爸,那麼這類情況我們用線性結構的形式就不足以描述了!
所以我們需要研究這種一對多的資料結構:樹。
樹(tree)是n(n>=0)個結點的有限集。當n=0時成為空樹,在任意一顆非空樹中:
雖然從概念上很容易理解數,但是有兩點還是需要注意的:
n>0時,根結點是唯一的,堅決不可能存在多個根結點。
m>0時,子樹的個數是沒有限制的,但它們互相是一定不會相交的。
上面所有中,每乙個圈圈我們稱為樹的乙個結點。結點擁有的子樹稱為結點的度(degree),樹的度取樹內各結點的度的最大值。
結點的子樹的根稱為結點的孩子(child),相應的,該結點稱為孩子的雙親(parent),同一雙親的孩子之間互稱為兄弟(sibling)。
結點的層次(level)從根開始,根為第一層,根的孩子為第二層。
其雙親在同一層的結點互稱為堂兄弟。
樹中結點的最大層次稱為樹的深度(depth)或者高度。
說到儲存結構,就會想到之前所了解到的:順序儲存結構和鏈式儲存結構兩種基本結構。
對於線性表來說,很直觀就可以理解,但對於樹這種一對多的結構,我們該怎麼辦呢?
要儲存樹,簡單的順序儲存結構和鏈式儲存結構是不能的!不過如果充分利用它們各自的特點,完全可以間接地來實現。
這裡有三種不同的表示方法:雙親表示法,孩子表示法,孩子兄弟表示法。
雙親孩子表示法的**:
#define max_tree_size 100
typedef char elemtype;
// 孩子結點
typedef struct ctnode
*childptr;
// 表頭結構
typedef struct
ctbox;
// 樹結構
typedef struct
樹的儲存結構 資料結構和演算法41
讓程式設計改變世界 change the world by program 不好意思哈,這節課又需要大家搞腦子了。對於知識,你理解的越多,需要記住的就越少!上節課我們簡單的介紹了樹結構的強大,這節課我們來關心一下如何在記憶體中安排樹這種結構的存放。說到儲存結構,就會想到我們前面章節講過的順序儲存和鏈...
資料結構與演算法 樹 B樹
概述 b樹也稱b 樹。b樹中所有結點中孩子結點個數的最大值成為b樹的階,通常用m表示,從查詢效率考慮,一般要求m 3。一棵m階b樹或者是一棵空樹,或者是滿足以下條件的m叉樹。定義 b樹是一種平衡的多分樹,通常我們說m階的b樹,它必須滿足如下條件 根結點至少有兩個子女。每個中間節點都包含k 1個元素和...
資料結構與演算法 樹
後序遍歷 已知前序和中序求後序 設計 的原則 1 有且僅有乙個根節點 2 所有的子樹也滿足該要求 子樹之間不能有交集 單個節點也是一棵樹 空樹 啥資料都沒有,沒有任何節點 根節點 父節點,子節點,兄弟節點 如果兩個節點的父節點雖不相同,但是它們的父節點處在同一層次上,那麼這兩個節點是兄弟節點 葉子節...