資料結構 樹,二叉樹

2021-07-25 09:23:31 字數 2567 閱讀 7546

【樹】:

1)樹是n(n>=0)個有限個資料的元素集合,形狀像一顆倒過來的樹。

2)節點:結點包含資料和指向其它節點的指標。

3)根節點:樹第乙個結點稱為根節點。

4)結點的度:結點擁有的子節點個數。

5)葉節點:沒有子節點的節點(度為0)。

6)父子節點:乙個節點father指向另乙個節點child,則child為孩子節點,father為父親節點 。

7)兄弟節點:具有相同父節點的節點互為兄弟節點。

8)節點的祖先:從根節點開始到該節點所經的所有節點都可以稱為該節點的祖先。

9)子孫:以某節點為根的子樹中任一節點都稱為該節點的子孫。

10)樹的高度:樹中距離根節點最遠節點的路徑長度

這些概念比較瑣碎,我在網上看到對樹的這些概念形象的用圖進行描述的比較好,在這裡我分享給大家:

2、樹的儲存結構:

用上圖來說明:

1)首先樹裡面肯定有值和節點,所以我們可以用結構體來儲存

struct treenode

;

2)但是樹里的節點有的是有孩子的有的是沒有的,這要怎麼來安排上面的node節點

3)於是我們可以聯想到vector容器類來進行動態的申請節點,這是一種方式

4)前幾篇中,我詳細講解了廣義表,有的同學了解的,想必已經想到可以用廣義表

5)那麼現在的我們沿襲了一種很經典的建立樹的節點的方法:引入了左孩子右兄弟

struct treenode

;

3、樹的應用:

我們可以看到,c盤就相當於根節點,下面的資料夾就是它的孩子,將其中的乙個資料夾開啟,有的為空就是葉子節點嘍。

【二叉樹】:

1、二叉樹的定義:

二叉樹是每個節點最多有兩個子樹的結構

2、二叉樹的性質:

1)二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點)

2)二叉樹的子樹有左右之分,次序不能顛倒。

3)二叉樹的第i層至多有2^個結點;

4)深度為k的二叉樹至多有2^k-1個結點;

5)對任何一棵二叉樹t,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1。

3、二叉樹的分類:

分為完全二叉樹和滿二叉樹

1)完全二叉樹:只有最後一層的節點是不滿的,並且只能是從左到右的不滿

滿二叉樹:所有的節點都是滿的

注:因此滿二叉樹是完全二叉樹,但是完全二叉樹不一定是滿二叉樹

4、二叉樹的儲存方式:

1)靜態儲存:用陣列來表示

舉例:

上面舉得例子樹是差不多都滿的,如果是下圖這樣的樹:

這樣用陣列進行儲存的時候,我們可以看到,有很多沒有節點的,如果使用陣列的話就會造成空間的浪費。

2)動態儲存(鏈式儲存)

有兩種方式:

a:二叉鍊錶:

b:三叉鍊錶

二叉鍊錶和三叉鍊錶的區別以及用法:

**二叉鍊錶不能訪問到雙親,只能往孩子的方向進行訪問,三叉鍊錶可以訪問雙親

**三叉鍊錶浪費空間,儲存密度比二叉鍊錶低

**總的來說這兩者就有點像鍊錶和順序表,使用的是否便捷性和具體的問題有關

5、二叉樹的四種遍歷方式

1)前序遍歷:根節點-->左子樹-->右子樹

2)中序遍歷:左子樹-->根節點-->右子樹

3)後序遍歷:左子樹-->右子樹-->根節點

4)層序遍歷:一層一層的遍歷

下面我來舉個例子:

a:前序遍歷的結果是:1,2,3,4,5,6

b:中序遍歷的結果是: 3,2,4,1,6,5

c:後序遍歷的結果是:3,4,2,6,5,1

d:層序遍歷的結果是:1,2,5,3,4,6

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

資料結構筆記 樹 二叉樹 滿二叉樹

二叉樹滿二叉樹 樹是n n 0 個結點的有限集。結點為零的樹為空樹。任意一棵非空樹中 1.有且有乙個特定的稱為根的結點 2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每乙個集合又是一棵樹,並稱為根的子樹。1.結點擁有的子樹數稱為結點的度 2.度為0的結點稱為葉結點或分支結點,除根...

資料結構 樹結構 二叉樹 完全二叉樹 滿二叉樹

樹結構是一種描述非線性層次關係的資料結構。除根結點外,其餘每個結點有且僅有乙個直接前驅。每個結點可以有任意多個直接後繼。英文名詞表示 tree,root,node,leaf,edge,child,subtree 要麼二叉樹沒有根結點,是一棵空樹。要麼二叉樹由根結點,左子樹,右子樹組成,且左子樹和右子...