資料結構 二叉樹 完全二叉樹 森林等 基礎講解

2021-09-26 05:59:45 字數 3260 閱讀 6174

1、基本術語:

度:有兩種度「結點的度」與「樹的度」。結點的度指的是乙個結點子樹的個數;樹的度是指樹中結點度的最大值。

葉子結點:指的是沒有子樹的結點

層:樹是有層次的,一般根結點為第0層。規定根結點到某結點的路徑長度為該結點的層數。

深度:樹中結點的最大層數

兄弟:同一雙親的結點,互為兄弟

堂兄弟:雙親在同一層次的結點,互為堂兄弟

祖先:從根結點到該結點的路徑上的所有結點都是該結點的祖先。

子孫:以某一結點為根的子樹上的所有結點都是該結點的子孫

森林:n棵互不相交的樹

2、二叉樹:

不同於樹,結點的度<=2,而且子樹有左右之分,如下圖:

編號規則為從左到右、從上到下,如下圖:

性質1:位於第i層的結點個數不大於2的i次方。

性質2:二叉樹的深度為n,二叉樹總的結點個數不大於2的n+1次方減去1。

性質3:葉子節點個數 = 度為2的結點個數 + 1

滿二叉樹:除了最底層的結點外,其餘結點的度均為2,如下圖

完全二叉樹:

官方定義:若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹

(1)所有的葉結點都出現在第k層或k-l層(層次最大的兩層)

(2)對任一結點,如果其右子樹的最大層次為l,則其左子樹的最大層次為l或l+l。

一棵二叉樹至多只有最下面的兩層上的結點的度數可以小於2,並且最下層上的結點都集中在該層最左邊的若干位置上,則此二叉樹成為完全二叉樹,並且最下層上的結點都集中在該層最左邊的若干位置上,而在最後一層上,右邊的若干結點缺失的二叉樹,則此二叉樹成為完全二叉樹。

性質1:編號為i的結點的雙親編號為i/2,結果取整

性質2:編號為i的結點的左孩子編號為2i,右孩子編號為2i+1

性質3:完全二叉樹的結點總數為n,則該完全二叉樹的高為log以2為底求n的對數,結果取整

二叉樹的實現:

順序儲存:

對於完全二叉樹和滿二叉樹可以利用完全二叉樹的性質2來定位雙親和孩子的位置。如下圖:

對於一般的二叉樹,採取補值的方法將二叉樹補成完全二叉樹,再利用完全二叉樹的順序儲存方式。

鏈式儲存:

結點包含3個值:資料域、指向左子樹的指標、指向右子樹的指標

二叉樹的遍歷:

先根遍歷:dlr 首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左、右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。

中根遍歷:ldr 首先遍歷左子樹然後訪問根結點,最後遍歷右子樹。在遍歷左、右子樹時,仍然先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。

後根遍歷:lrd 首先遍歷左子樹然後遍歷右子樹,最後訪問根結點。在遍歷左、右子樹時,仍然先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。

樹如何轉換成二叉樹?

步驟1:僅保留最左邊孩子與根節點的連線,並連線兄弟結點。如下圖,b是a最左邊的孩子,所以保留a與b的連線,斷開a與c,a與d的連線。b、c、d是兄弟,所以將bcd連線起來。對於以b、c、d為根的子樹仍然按照這樣的規則轉換。

步驟2:左子樹順時針旋轉45度,便得到了轉換後的二叉樹

二叉樹如何轉換成樹?

步驟1:與樹轉換成二叉樹的步驟相反,左子樹逆時針旋轉45度

步驟2:斷開兄弟之間的連線,連線雙親。

森林如何轉換成二叉樹?

步驟1:每棵樹都先轉換為二叉樹

步驟2:以第一棵樹的根結點為根結點,將根結點依次連線起來

步驟3:按照根結點順時針旋轉45度

二叉樹如何轉換成森林?

步驟1:斷開根結點與右子樹的連線,對於右子樹仍然按照規定斷開與右子樹的連線。這樣得到多個二叉樹

步驟2:將每棵二叉樹轉換為樹

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

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

二叉樹,完全二叉樹,滿二叉樹

二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...