資料結構——樹和森林

sjyzy97發表於2020-10-04

思維導圖

在這裡插入圖片描述

樹是一種邏輯結構
樹是n個結點的有限集合,n=0時,稱為空樹,任意的非空樹滿足一下要求:
1)有且僅有一個特定的稱為根的結點。
2)當n>1時,其餘結點可分為m個互不相交的有限集合,其中每個集合本身又是一棵樹,稱為根結點的子樹,n個結點的樹只有n-1條邊
3)樹個根節點沒有前驅結點,除了根節點以外的所有結點都有且僅有一個前驅結點
4)數中的結點有多個或者0個後繼結點

樹的基本術語

在這裡插入圖片描述
祖先結點,子孫結點,雙清結點:k結點,根結點A到K的唯一路徑上的任意結點(A,B,E),都是k結點的祖先結點,k是它們的子孫結點,而離k最近的祖先結點E,可稱為雙親結點,根結點A是唯一一個沒有雙親結點的,擁有共同雙親結點的結點稱之為兄弟結點,如K,L
:樹中一個結點的孩子結點個數稱之為該節點的度。如B的度為2,D的度為3,數的度:樹種最大度數為樹的度如圖為3
分支結點:度大於0的結點
子結點:度等於0的結點
結點層次:如圖根節點為第一層,根結點的子節點為第二層,依次向下,如圖
結點的深度:是從根節點開始自頂向下累加的
結點的高度:是從葉結點開始自下向上累加的
數的高度和深度是樹種結點的最大層數
有序樹指樹的結點從左到右是有序的,不能任意更換,無序樹是指結點從左到右沒有規律,可以互換
路徑和路徑長度:數的路徑是由兩個結點之間經過的結點序列,而路徑長度是指這個序列的長度,樹的路徑長度是從根結點到每個結點路徑長度的總和。
森林:森林是m顆互不相交的數的集合。

樹的性質

樹中結點數等於所有結點的度數加1
度為m的樹中第i層上至多有mi-1 個結點
高度為h的m叉樹至多有(mh -1)/(m-1)個結點
具有n個結點的m叉樹的最小高度為log (n(m-1)+1,m)取上限

二叉樹

定義:有左孩子和右孩子的樹
不同孩子的二叉樹不為同一二叉樹,一顆兩層的二叉樹有5中情況

特殊的二叉樹

滿二叉樹

完全二叉樹

二叉排序樹(二叉搜尋樹)

平衡二叉樹

任意結點的左孩子和右孩子深度之差不超過1

二叉樹的性質

二叉樹的儲存結構

順序儲存

根據完全二叉樹的性質左孩子2i,右孩子為2i+1,順序表示每個結點的關係

鏈式儲存

一個結點定義兩個指標域分別指向左孩子和右孩子

二叉樹的遍歷

先序遍歷

時間複雜度O(n)
先序遍歷

中序遍歷

在這裡插入圖片描述
在這裡插入圖片描述

後序遍歷

在這裡插入圖片描述

層次遍歷

出隊一個元素壓入此元素的左孩子和右孩子
在這裡插入圖片描述
在這裡插入圖片描述

由遍歷序列構造二叉樹

後序和中序,前序和中序,層次和中序可以構造出二叉樹,前序和後序不可以確定一顆二叉樹

線索二叉樹

線索化
若無左子樹,則將左指標指向其前驅結點,若無右子樹,則將指標指向後繼結點

在這裡插入圖片描述

樹的儲存結構

雙親表示法

在這裡插入圖片描述
在這裡插入圖片描述

孩子表示法

在這裡插入圖片描述
在這裡插入圖片描述

孩子兄弟表示法

在這裡插入圖片描述
在這裡插入圖片描述

三種表示法的有優缺點

在這裡插入圖片描述

樹和二叉樹

數和二叉樹的轉換

在這裡插入圖片描述

左指標指向孩子結點,右指標指向兄弟結點
在這裡插入圖片描述
在這裡插入圖片描述
二叉樹向數的轉變為逆過程
在這裡插入圖片描述

森林轉換為二叉樹

把森林中的所有樹轉換為二叉樹,然後每顆二叉樹的根作為上一顆二叉樹的右子樹
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
二叉樹返回森林為逆過程

樹和森林的遍歷

樹的遍歷

先根遍歷 後根遍歷 層次遍歷
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

森林的遍歷

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

相關文章