一、樹的定義:
由節點組成的一個具有層次關系的集合;長的像樹所以叫樹;
擼樹神器:https://www.cs.usfca.edu/~galles/visualization/
二、二叉樹:
特性:1)左子樹上所有節點的值均小於它的根節點的值;
2) 右子樹上所有節點的值均大於它的根節點的值;
示例:一個不好會形成鏈表結構;
三、平衡二叉樹(AVL):
特性:1)在二叉樹的基礎上,要求兩個子樹的高度差不能超過1;
1)每次增刪都會通過一次或多次旋轉來平衡二叉樹;
示例:重新插入123456節點;
四、紅黑樹:
特性:1)節點要么黑要么紅;
2)根節點一定時黑色;
3)所有葉節點都為null,且為黑色;
4)紅色節點的兩個子節點都為黑色,不會有兩個連續的紅;
5)任意一個路徑上的黑節點數,一定時相等的;
ps:Java中的terrMap和treeSet是紅黑樹實現;
五、B Trees/B+ Trees:
1)每個節點擁有多個值,2個位二叉,3個為三叉,超過這個值就需要分子節點;
2)平衡節點讓路徑的深度減小IO讀取次數隨之減少;
3)平衡節點中的數據是放到內存中判斷的,所以速度快;
六、B+ Trees:
mysql的索引就是B+ Trees實現的;
特點:1)非子葉節點沒有沒有數據,只有索引;
2)所以不管查那個數據,都要從葉節點獲取,每次查詢的次數都是一樣的;
3)mysql中的索引讀取值,只需要一次哈希計算,所以速度比B Tree快;