數據結構篇之二叉樹

一、樹的定義

樹型結構是一類非線性的數據結構,樹是以分支關係定義的層次結構,如下圖所示:

在這裏插入圖片描述

樹是n(n >= 0)個節點的有限集,在任意一顆非空樹中:

  1. 有且僅有一個特定的稱爲根的節點;
  2. 當n > 1時,其餘節點可分爲m(m > 0)個互不相交有限集,其中每一個集合本身又是一棵樹,並且稱爲根的子樹;

樹的結點包含一個數據元素以及若干指向其子樹的分支,節點擁有的子樹數稱爲結點的度,度爲0的稱爲葉子或終端結點,上圖中G、H、I、J、F都是樹的葉子。度不爲0的結點稱爲非終端結點或分支結點,上圖樹的度爲2。

除根節點之外,分支節點也稱爲內部結點。樹的度是樹內各結點的的度的最大值。結點的子樹的根稱爲該結點的孩子,相應地,該結點稱爲孩子的雙親。

如果將樹中結點的各子樹看成從左至右是有次序的,則稱該樹爲有序樹,否則稱爲無序樹。在有序樹中最左邊的子樹的根稱爲第一個孩子,最右邊的稱爲最後一個孩子。

二、二叉樹

1、定義及性質

二叉樹是另一種樹型結構,它的每個結點至多隻有兩個子樹(即二叉樹中不存在度大於2的結點),並且二叉樹的子樹有左右之分,其次序不能隨意顛倒。

二叉樹具有以下性質:

  • 性質一:在二叉樹的第i層至多有 2i-1 個結點(i >= 1);

  • 性質二:深度爲k的二叉樹至多有 2k-1 個結點(k >= 1);

  • 性質三:對任何一棵二叉樹T,如果其終端結點數爲n0,度爲2的結點數爲n2,則n0 = n2 + 1;

  • 性質四:具有n個結點的完全二叉樹的深度爲 k - 1 <= log2n < k;

  • 性質五:如果對一棵有n個結點的完全二叉樹,則對任一結點,有:

    ​ (1) 如果 i = 1,則結點 i 是二叉樹的根,無雙親;如果 i > 1,則其雙親PARET(i)是結點不大於 i/2;

    ​ (2) 如果 2i > n,則結點 i 無左孩子;否則其左孩子LCHILD(i) 是結點 2i;

    ​ (3) 如果 2i + 1 > n,則結點 i 無右孩子;否則其右孩子RCHILD(i) 是結點 2i + 1。

二叉樹的深度:深度是從上到下數的,指根結點到該結點的最長簡單路徑邊的條數;

二叉樹的高度:高度是從下往上數的,高度是從葉子結點到它的根結點的最長簡單路徑的條數。

2、遍歷二叉樹

按某條搜索路徑巡訪樹中的每個結點,使得每個結點均被訪問一次,而且僅被訪問一次,即爲遍歷二叉樹。二叉樹是由3個基本單元組成:根節點、左子樹和右子樹,因此,遍歷二叉樹有三種遞歸算法。

對於非空的二叉樹有以下3中遍歷方法:

  1. 先序遍歷二叉樹:訪問根節點 > 先序遍歷左子樹 > 先序遍歷右子樹;
  2. 中序遍歷二叉樹:中序遍歷左子樹 > 訪問根節點 > 中序遍歷右子樹;
  3. 後序遍歷二叉樹:後序遍歷左子樹 > 後序遍歷右子樹 > 訪問根節點;

3、滿二叉樹

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

在這裏插入圖片描述

4、完全二叉樹

完全二叉樹是由滿二叉樹而引出來的。對於深度爲K的,有n個結點的二叉樹,當且僅當其每一個結點都與深度爲K的滿二叉樹中編號從1至n的結點一一對應時稱之爲完全二叉樹。

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

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

在這裏插入圖片描述

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

5、平衡二叉樹

平衡二叉樹又被稱爲AVL樹,它具有以下性質:

  • 它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差的絕對值不超過1;
  • 若將二叉樹節點的平衡因子BF定義爲該節點的左子樹的深度減去它的右子樹的深度,則平衡二叉樹上所有節點的平衡因子只可能爲-1,0,1;
  • 只要二叉樹上有一個節點的平衡因子的絕對值大於1,那麼這顆平衡二叉樹就失去了平衡。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章