心中有樹——基礎

博客書寫不易,您的點贊收藏是我前進的動力,千萬別忘記點贊、 收**藏 ^ _ ^ !

  1. 心中有堆 https://blog.csdn.net/luo_boke/article/details/106928990
  2. 心中有樹——基礎 https://blog.csdn.net/luo_boke/article/details/106980011
  3. 心中有棧 https://blog.csdn.net/luo_boke/article/details/106982563

樹 (Tree)
樹是n(n>=0)個結點的有限集,n=0時稱爲空樹。樹的定義使用了遞歸的方式,樹是數據結構中的重中之重。
非空樹特性:
1)有且僅有一個特定的稱爲根(Root)的結點,根有且僅有一個;
2)當n>1時,其餘結點可分爲m(m>0)個互不相交的有限集T1、T2、…、Tn,其中每一個集合本身又是一棵樹,並且稱爲根的子樹。
在這裏插入圖片描述

結點
結點是數據結構中的基礎,是構成複雜數據結構的基本組成單位


結點擁有的子樹數目稱爲結點的度。

結點關係

  • 結點子樹的根結點爲該結點的孩子結點,如B是A的孩子結點。相應該結點稱爲孩子結點的雙親結點,A是B的雙親結點。
  • 同一個雙親節點的孩子結點之間互稱兄弟結點,如B和C稱爲兄弟結點

層次
從根開始定義起,根爲第一層,根的孩子爲第二層,以此類推。

樹的深度
樹中結點的最大層次數稱爲樹的深度或高度。圖中樹的深度爲4。

二叉樹

二叉樹是n(n>=0)個結點的有限集合,二叉樹由一個根結點和兩棵互不相交的、分別稱爲根結點的左子樹和右子樹組成。每個結點最多有兩個孩子結點。
在這裏插入圖片描述
二叉樹特點

  • 每個結點最多有兩顆子樹,左子樹和右子樹是有順序的,次序不能任意顛倒。
  • 即使樹中某結點只有一棵子樹,也要區分它是左子樹還是右子樹。
  • 在二叉樹的第i層上最多有2i-1 個結點 (i>=1)
  • 二叉樹中如果深度爲k,那麼最多有2k-1個結點。(k>=1)
  • 在完全二叉樹中,具有n個節點的完全二叉樹的深度爲[log2(n)]+1,其中[log2(n)]是向下取整。

二叉樹性質
1)在二叉樹的第i層上最多有2i-1 個節點 。(i>=1)
2)二叉樹中如果深度爲k,那麼最多有2k-1個節點。(k>=1)
3)n0=n2+1 n0表示度數爲0的節點數,n2表示度數爲2的節點數。
4)在完全二叉樹中,具有n個節點的完全二叉樹的深度爲[log2n]+1,其中[log2n]是向下取整。
5)若對含 n 個結點的完全二叉樹從上到下且從左至右進行 1 至 n 的編號,則對完全二叉樹中任意一個編號爲 i 的結點有如下特性:

(1) 若 i=1,則該結點是二叉樹的根,無雙親, 否則,編號爲 [i/2] 的結點爲其雙親結點;
(2) 若 2i>n,則該結點無左孩子, 否則,編號爲 2i 的結點爲其左孩子結點;
(3) 若 2i+1>n,則該結點無右孩子結點, 否則,編號爲2i+1 的結點爲其右孩子結點。

斜樹
所有的結點都只有左子樹的二叉樹叫左斜樹。所有結點都是隻有右子樹的二叉樹叫右斜樹。這兩者統稱爲斜樹。
在這裏插入圖片描述
滿二叉樹
在一棵二叉樹中。如果所有分支結點都存在左子樹和右子樹,並且所有葉子都在同一層上,這樣的二叉樹稱爲滿二叉樹。

  • 葉子只能出現在最下一層,出現在其它層就不可能達成平衡。
  • 非葉子結點的度一定是2
  • 在同樣深度的二叉樹中,滿二叉樹的結點個數最多,葉子數最多
    在這裏插入圖片描述
    完全二叉樹
    對一顆具有n個結點的二叉樹按層編號,如果編號爲i(1<=i<=n)的結點與同樣深度的滿二叉樹中編號爲i的結點在二叉樹中位置完全相同,則這棵二叉樹稱爲完全二叉樹。滿二叉樹是一種特殊的完全二叉樹
  • 葉子結點只能出現在最下層和次下層。倒數第二層若存在葉子結點,一定是右結點
  • 如果結點度爲1,則該結點只有左孩子,即沒有右子樹
  • 最下層的葉子結點集中在樹的左部。
  • 同樣結點數目的二叉樹,完全二叉樹深度最小。
    在這裏插入圖片描述

二叉樹存儲結構

順序存儲
二叉樹的順序存儲結構就是使用一維數組存儲二叉樹中的結點,並且結點的存儲位置,就是數組的下標索引。
在這裏插入圖片描述
順序存儲一般適用於完全二叉樹。其他二叉樹可能有嚴重的空間浪費。

二叉鏈表
使用鏈式存儲方式,將結點數據結構定義爲一個數據和兩個指針域。
在這裏插入圖片描述
在這裏插入圖片描述

二叉樹遍歷

二叉樹的遍歷是指從二叉樹的根結點出發,按照某種次序依次訪問二叉樹中的所有結點,使得每個結點被訪問一次,且僅被訪問一次。
按時訪問次序有四種遍歷法:

  • 前序遍歷
  • 中序遍歷
  • 後序遍歷
  • 層序遍歷
    在這裏插入圖片描述

前序遍歷
從二叉樹的根結點出發,當第一次到達結點時就輸出結點數據,第二次不輸出數據,按照先向左再向右的方向訪問,從根節點向下先遍歷完最左的節點。
遍歷過程:
1)從A開始遍歷,第一次到達A,輸出A。同理輸出B
2)B訪問後,B有左子結點D,則訪問D輸出D。D有左子結點H,訪問輸出H
3)H是葉子結點,訪問完畢後返回D,繼續訪問D的右結點E,輸出E。同理訪問輸出J。
4)從E返回到B,返回到A,訪問A的右子結點,最後一次輸出C、F、G
輸出結果: ABDHIEJCFG

中序遍歷
從二叉樹的根結點出發,當第二次到達結點時就輸出結點數據,當訪問到葉節點時也輸出數據,按照先向左在向右的方向訪問。
遍歷過程:
1)如前序遍歷一樣,遍歷到H時,H是葉節點輸出H。
2)從H返回到D,第二次遍歷D,輸出D。同理輸出葉節點I。
3)返回第二次訪問B,輸出B。同理輸出J、E。
4)返回第二次訪問A ,同理輸出F、C、G。
輸出結果:HDIBJEAFCG

後序遍歷
從二叉樹的根結點出發,當第三次到達結點時就輸出結點數據,但當訪問到葉節點時也輸出數據,按照先向左在向右的方向訪問。當結點的子節點被輸出後,可以視作將該節點的該子節點移除,兩個子節點都被輸出後,該節點也相當於是個葉節點了。
遍歷過程:
1) 如同中序遍歷中,第一個葉節點輸出H,第二個節點輸出I。
2)從I返回D時是第三次訪問D,輸出D。
3)接着訪問輸出的葉節點是J,返回E後是第二次訪問,此時J已輸出,可將E看成一個葉節點輸出E
4)接下來同理輸出的是B、F、G、C、A
輸出結果:HIDJEBFGCA

層次遍歷
按照樹的層次自上而下的遍歷二叉樹,一層一層的遍歷完數據。
輸出結果:ABCDEFGHIJ

二叉樹考題

首先要清楚幾種二叉樹遍歷的特性。

  1. 前序遍歷第一個輸出結點爲根結點
  2. 中序遍歷中根結點處於左右子樹結點中間,不一定是正中間
  3. 後序遍歷中最後訪問的爲根結點
  4. 層次遍歷,只要知道輸出結果,基本能確定N-2及以上層次的結構。

考題:若一棵二叉樹的後序遍歷爲ABCDFE,中序遍歷爲ABCEDF,請畫出這棵二叉樹。
分析:後續遍歷爲ABCDFE,則根節點爲E。 中序遍歷爲CBAEDF,則根節點E左邊爲CBA,右邊爲DF。根據特性可畫出樹的結構圖如下:
在這裏插入圖片描述

原創博客書寫不易,您的點贊收藏是我前進的動力,請您幫助伸手點贊、 收藏 ^ _ ^ !

相關鏈接:

  1. 心中有堆
  2. 心中有棧
  3. 常見排序算法解析
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章