C++數據結構——樹(基礎知識篇)


C++數據結構——樹(基礎知識篇)


1. 簡介

​ 樹是數據結構中的重點,也是我們學習數據結構這門課程中的難點,接下來我們會先來介紹一下樹這種數據結構中的一些基礎知識,為我們后面的學習打下基礎。

本篇博客不涉及代碼實現,只有理論知識,所有的代碼實現會另起篇幅。

2. 基本結構

一棵樹是N個節點和N-1條邊的集合,其中一個節點叫做根節點,每條邊都將某個節點連接到它的父親,而除去根節點外每個節點都只有一個父親,每個子節點之間互不相交。

3. 基礎知識

3.1 術語

1.節點的度:節點的子節點(子樹)個數。例如上圖中:節點2的度為3,因為它有456三個子節點。

2.樹的度:樹中節點的最大的度。

3.葉子節點:度為0的節點。上圖中節點45678都是葉子節點

4.父節點:顧名思義,當前節點的父親,就像人際關系一樣,例如:節點1是節點2和節點3的父親。子節點,祖父節點,兄弟節點等等之類的以此類推就行了。

5.路徑和路徑長度:路徑是一個節點序列,是多個節點的集合,而路徑的長度為路徑所包含的邊的個數,例如:從節點1到節點4的路徑為1-2-4,路徑長度為2。

6.節點的層次:規定根節點在第一層,其他的節點層次是其父節點的層次+1。

7.樹的深度:樹中最大的層次就是樹的深度。

8.樹的高度:與深度相反,高度的第一層是深度的最后一層,樹的高度與深度一致(深度是從上往下數,高度是從下往上數)

3.2 樹的表示方式

樹有基本的三種表示方式,分別是雙親表示法、孩子表示法、孩子兄弟表示法

由於雙親表示法和孩子表示法局限太大而且不常用(有興趣的讀者可以自己去查閱一下其他資料),我們重點介紹一下孩子兄弟表示法。

又是這張圖,我們已經很清楚圖中各個節點之間的關系了,而這種樹的子節點個數並不統一,有兩個的有三個的,這樣我們在創建結構體(類)的時候會十分困難,那么有沒有一種方法可以讓他們的結構統一起來呢,這就是我們的孩子兄弟表示法的由來。我們把它稍微變一下,它就變成了這樣:

我們會發現經過轉換,他們的子節點至多有兩個(也就是整棵樹的度為2),分別表示他們的孩子和兄弟,而且這種轉換並不會使關系混亂,例如節點2是節點4的父節點,而456三個節點是兄弟節點,說明456都是2的孩子,我們通過這種方式把普通的樹轉換成為了一顆二叉樹(度為2的樹)

3.3樹的分類

​ 二叉樹:二叉樹是一顆樹,其中每個節點都不能多於兩個兒子

​ 滿二叉樹:除了葉子節點,每個節點的度都是2

​ 完全二叉樹:一棵深度為k的有n個結點的二叉樹,對樹中的結點按從上至下、從左到右的順序進行編號,如果編號為i(1≤i≤n)的結點與滿二叉樹中編號為i的結點在二叉樹中的位置相同,則這棵二叉樹稱為完全二叉樹。

​ 至於其他的高級樹形結構我們以后的文章在單獨列出。

4. 樹的遍歷

樹有四種遍歷方式,分別是先序、中序、后序、層次遍歷。

先序、中序、后序遍歷是以根節點的遍歷順序作為依據:
先序遍歷的順序是根節點--->左子樹--->右子樹,中序是左根右,后序是左右根

我們以下面的這張圖為例

它的先序、中序、后序遍歷順序分別是:
12453678、42513768、42578631

層次遍歷最簡單:12345678就是層次遍歷的順序了,按照從上到下,從左往右。


有些知識點沒想起來,本篇持續更新,歡迎大家在評論區提醒我


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM