一、樹的定義
樹型結構是一類非線性的數據結構,樹是以分支關係定義的層次結構,如下圖所示:
樹是n(n >= 0)個節點的有限集,在任意一顆非空樹中:
- 有且僅有一個特定的稱爲根的節點;
- 當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中遍歷方法:
- 先序遍歷二叉樹:訪問根節點 > 先序遍歷左子樹 > 先序遍歷右子樹;
- 中序遍歷二叉樹:中序遍歷左子樹 > 訪問根節點 > 中序遍歷右子樹;
- 後序遍歷二叉樹:後序遍歷左子樹 > 後序遍歷右子樹 > 訪問根節點;
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,那麼這顆平衡二叉樹就失去了平衡。