數據結構——樹


一、樹的定義與基本術語

1、樹的定義

  • 樹是n(n>=0)個結點的有限集合
  • 如果n=0,稱為空樹;
  • 如果n>0, 稱為非空樹, 對於非空樹:
    (1)有且僅有一個特定的稱為根(Root)的結點;
    (2)當n>1時,其余結點可分為m(m>0)個互不相交的有限集T1、T2、……、Tm,其中每一個集合本身又是一棵樹,並且稱為根的子樹(SubTree)。
    (此為遞歸定義)

注意:
1.n>0時根結點是唯一的,不可能存在多個根結點。
2.m>0時,子樹的個數沒有限制,但它們一定是互不相交的。

2、樹的基本術語

結點分類

  • 結點:包含一個數據元素及若干指向其子樹的分支
  • 結點的度:結點擁有的子樹數
  • 葉結點(終端結點):度為0的結點[沒有子樹的結點]
  • 分支結點(非終端結點):度不為0的結點[包括根結點],除根結點之外分支結點也稱內部結點

結點間的關系

  • 孩子:結點的子樹的根[直接的后繼,可能有多個]
  • 雙親:孩子的直接前驅[最多只能有一個]
  • 兄弟:同一雙親的孩子
  • 子孫:以某結點為根的樹中的任一結點都稱為該結點的子孫
  • 祖先:從根到該結點所經分支上的所有結點

樹的其他相關概念

  • 層次:根結點為第一層,其孩子為第二層,依此類推
  • 深度:樹中結點的最大層次
  • 有序樹:子樹之間存在確定的次序關系。
  • 無序樹:子樹之間不存在確定的次序關系。
    (如果將樹中結點的子樹看成從左至右是有次序的,不能互換的,則該樹稱為有序樹,否則稱為無序樹。)
  • 森林:互不相交的樹的集合。對樹中每個結點而言,其子樹的集合即為森林。

任何一棵非空樹是一個二元組:  Tree = (root,F)
其中:root 被稱為根結點,F被稱為子樹森林

線性結構與樹結構區別

二、二叉樹

對於這種在某個階段都是兩種結果的情形,比如開和關、0和1、真和假、上和下、對與錯、正面和反面等,都適合用樹狀結構來建模,而這種樹是很特殊的樹狀結構,叫做二叉樹。

1、二叉樹的定義

  • 二叉樹(Binary Tree)是n(n≥0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由一個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。如下圖:

  • 每個結點最多有兩棵子樹,所以二叉樹中不存在度大於2的結點。

  • 左子樹和右子樹是有順序的,次序不能任意顛倒。

  • 即使樹中某結點只有一棵子樹,也要區分它是左子樹還是右子樹。如下圖,樹1和樹2是同一棵樹,但它們卻是不同的二叉樹。

  • 二叉樹具有五種基本形態:

  1. 空二叉樹;
  2. 只有一個根結點;
  3. 根結點只有左子樹;
  4. 根結點只有右子樹;
  5. 根結點既有左子樹又有右子樹。
    如果有三個結點,則存在如下五種二叉樹:

2、特殊的二叉樹

斜樹

所有結點都只有左子樹的二叉樹叫左斜樹。所有結點都只有右子樹的二叉樹叫右斜樹。

  • 斜樹有很明顯的特點,就是每一層都只有結點,結點的個數與二叉樹的深度相同。
  • 其實線性表的結構可以理解為樹的一種極為特殊的表現形式。

滿二叉樹

在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,並且所有葉子都在同一層上,這樣的二叉樹稱為滿二叉樹
如下圖:

  • 滿二叉樹的特點:
  1. 葉子只出現在最下一層,出現在其他層就不可能達到平衡。
  2. 非葉子結點的度一定是2。
  3. 在同樣深度的二叉樹中,滿二叉樹的結點個數最大,葉子個數也最多。

完全二叉樹

如果對一顆有n個結點的二叉樹按層序排序,如果編號為i(1<=i<=n)的結點與同樣深度的滿二叉樹中編號為i的結點在二叉樹中位置完全相同,則稱這顆二叉樹為完全二叉樹

  • 完全二叉樹的一些特點
  1. 葉子結點只出現在最下面兩層
  2. 最下層的葉子一定集中在左部連續位置
  3. 倒數第二層,如果有葉子結點,一定在右部連續位置
  4. 如果結點度為1,則一定只有左孩子
  5. 同樣結點數的二叉樹,完全二叉樹的深度最小

3、二叉樹的性質

性質1

在二叉樹的第i層上至多有2i-1個結點(i>=1)

性質2

深度為k的二叉樹至多有2k-1個結點(k>=1)

性質3

對任意一個二叉樹,如果其終端結點數為n0,度為2的結點數為n2,則n0 = n2+1。

性質4

具有n個結點的完全二叉樹的深度為[log2n]+1([]表示向下取整)

性質5

如果對一顆有n個結點的完全二叉樹的結點按層序編號,對任意一個結點i(1<=i<=n)有:
1. 如果i=1,則結點i為二叉樹的根,無雙親;如果i>1,則其雙親為結點[i/2]。
2. 如果2i>n,則則結點i無左孩子(且結點i為葉子結點);否則其左孩子為結點2i。
3. 如果2i+1>n,則則結點i無右孩子;否則其右孩子為結點2i+1。


免責聲明!

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



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