資料結構與演算法12 樹和樹的儲存結構

2021-09-25 22:56:31 字數 1263 閱讀 7470

這是本次學習的第二個資料結構:樹。

之前我們一直討論的是一對一的線性結構,無論是線性表也好,棧和佇列也罷,都是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 所有的子樹也滿足該要求 子樹之間不能有交集 單個節點也是一棵樹 空樹 啥資料都沒有,沒有任何節點 根節點 父節點,子節點,兄弟節點 如果兩個節點的父節點雖不相同,但是它們的父節點處在同一層次上,那麼這兩個節點是兄弟節點 葉子節...