一、樹的基本概念:樹是由根結點和若干顆子樹構成的。樹是由一個集合以及在該集合上定義的一種關系構成的。
(1)每個元素稱為結點(node);
(2)有一個特定的結點被稱為根結點或樹根(root);
(3)相關術語:
結點的度:一個結點含有的子樹的個數
葉子結點或終端結點:度為0的結點
節點的層數: 樹根到節點的路徑長度是該節點的層數,節點都有層數,根所在的層為0
樹的高度或深度:樹的高度或深度是樹中節點的最大層數(最長路徑的長度)加1 ,空樹高度為0,只有根節點的樹高度為1
二、二叉樹 :每個節點最多含有兩個子樹的樹稱為二叉樹;
1、普通二叉樹的特點:
(1)結點的度:一個結點含有的子樹的個數(0,1,2);
(2)在非空二叉樹中,第i層的結點總數不超過 , i>=1;
(3)深度為h的二叉樹最多有 個結點(h>=1),最少有h個結點;
(4)對於任意一棵二叉樹,如果其葉結點數為N0,而度數為2的結點總數為N2,則N0=N2+1;
2、二叉樹的分類
(1)完全二叉樹(Complete Binary Tree) :若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第h層有葉子結點,並且葉子結點都是從左到右依次排布,這就是完全二叉樹。
性質:有N個結點的完全二叉樹各結點如果用順序方式存儲,則結點之間有如下關系:
(2)完美/滿二叉樹(Perfect Binary Tree):除了葉結點外每一個結點都有左右子葉且葉子結點都處在最底層的二叉樹。性質:深度為h的二叉樹有 個結點(h>=1)
(3)二叉查找樹:指一棵空樹或者具有下列性質的二叉樹
1. 若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
2. 若任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
3. 任意節點的左、右子樹也分別為二叉查找樹。
4. 沒有鍵值相等的節點。
性質:主要用於查找,但查找的效率與樹的深度有關,一般時間復雜度為O(nlogn),
是對二分查找算法的改善;二叉排序樹上的查找與二分查找相差不大,且二叉排序樹上的插入和刪除結點十分方便,但當樹為單只樹時,查找效率退化O(n)
(4)平衡二叉搜索樹:為了解決二叉查找樹高度問題,在二叉查找樹的基礎上,增加了平衡因子。
性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹
平衡二叉樹的常用實現方法有紅黑樹、AVL等。
a、AVL:AVL是最先發明的自平衡二叉查找樹算法。在AVL中任何節點的兩個兒子子樹的高度最大差別為一,所以它也被稱為高度平衡樹, n個結點的AVL樹最大深度約1.44log2n。查找、插入和刪除在平均和最壞情況下都是O(log n)。增加和刪除可能需要通過一次或多次樹旋轉來重新平衡這個樹。
b、紅黑樹:紅黑樹是一種自平衡二叉查找樹,是在計算機科學中用到的一種數據結構,典型的用途是實現關聯數組,他稱之為"對稱二叉B樹",它是復雜的,但它的操作有着良好的最壞情況運行時間,並且在實踐中是高效的:它可以在O(log n)時間內做查找,插入和刪除,這里的n是樹中元素的數目。
此外,還有平衡多叉查找樹(B/B-樹),B+樹(B樹的優化版)