<資料結構> 樹Tree(簡單理論)
一.與樹相關的基本概念
1.樹是可以為空樹的 即根為空
2.樹的層數 即為當前樹的高度
3.結點的高度 從下往上看 看它下面有幾個人
結點的深度 從上往下看 看它上面有幾個人
4.度 即當前結點有幾個孩子 整棵樹的度就是最大的某一結點的度
5.中間結點 即為有孩子的結點
葉子結點 即為沒有孩子的結點
(一直糾結在一個點上 到底是節點 還是結點 查了一下 對於完全二叉樹來說 專業一點 是葉子結點 和非葉子節點 結點就是結束的點 節點還是有相交的線的部分)
二.二叉樹的分類
1.滿二叉樹:每層都是滿的的二叉樹
2.完全二叉樹:只有最後一層有空缺 並且是從右往左連續空缺
3.排序二叉樹BST:也稱為二叉搜尋樹
BST不允許出現數值相同的結點 每一個值都必須是唯一的
BST的查詢速度相對來說還是挺快挺好 但是當有一種特殊情況變成了連結串列的話
它也就失去了這種速度和效率 為了避免這種情況 就出現了平衡二叉樹
4.平衡二叉樹ABL:ABL是建立在BST的基礎之上的 除此以為
ABL樹中任意結點的左右子高度差不能超過1
三.二叉樹的性質
1.一個樹k層 那麼這個樹的節點數最多(即為滿二叉樹)為2^k-1
2.一個樹k層 那麼這個樹的葉子結點最多為2^(k-1)
3.設一棵樹的總結點個數為S 度為0的結點個數為n0 度為1的為n1 度為2的為n2
那麼S=n0+n1+n2(這個式子不難理解 一棵二叉樹總的結點個數 就是度分別為1,2,3的結點總數)
我們還可以得出S=0*n0+1*n1+2*n2+1(0*n0表示被n0指向的 1*n1即為被n1指向的 n2同理 最後要加1是因為根沒有人指向它 所以要加1)
最後上面兩個式子聯立就可以得出這樣一條結論:n0=n2+1
即度為0的結點個數比度為2的結點個數多一個
注:在完全二叉樹中 度為1的結點最多有一個 最少有0個
(PS:以下第4點第5點僅僅適用於完全二叉樹)
4.n個結點的完全二叉樹 它的高度k=⌊log2n⌋+1(向下取整)
5.把一顆完全二叉樹 按照從上到下 從左到右的順序開始編號:
①從1開始:編號為i的結點 左孩子編號為2*i 右孩子的編號為2*i+1
證明左右孩子是當前結點的孩子條件是<=n
父親結點的範圍是:1~n/2(n為總結點個數)
②從0開始:編號為i的結點 左孩子編號為2*i+1 右孩子的編號為2*i+2
證明左右孩子是當前結點的孩子條件是<=n-1
父親結點的範圍是:0~n/2-1(n為總結點個數)