认识平衡树
二叉搜索樹的缺陷
當插入的數據是有序的數據,就會造成二叉搜索樹的深度過大。比如原二叉搜索樹右 11 7 15 組成,如下圖所示:
當插入一組有序數據:6 5 4 3 2就會變成深度過大的搜索二叉樹,會嚴重影響二叉搜索樹的性能。
非平衡樹
- 比較好的二叉搜索樹,它的數據應該是左右均勻分布的;
- 但是插入連續數據后,二叉搜索樹中的數據分布就變得不均勻了,我們稱這種樹為非平衡樹;
- 對于一棵平衡二叉樹來說,插入/查找等操作的效率是O(logN);
- 而對于一棵非平衡二叉樹來說,相當于編寫了一個鏈表,查找效率變成了O(N);
樹的平衡性
為了能以較快的時間O(logN)來操作一棵樹,我們需要保證樹總是平衡的:
- 起碼大部分是平衡的,此時的時間復雜度也是接近O(logN)的;
- 這就要求樹中每個節點左邊的子孫節點的個數,應該盡可能地等于右邊的子孫節點的個數;
常見的平衡樹
- AVL樹:是最早的一種平衡樹,它通過在每個節點多存儲一個額外的數據來保持樹的平衡。由于AVL樹是平衡樹,所以它的時間復雜度也是O(logN)。但是它的整體效率不如紅黑樹,開發中比較少用。
- 紅黑樹:同樣通過一些特性來保持樹的平衡,時間復雜度也是O(logN)。進行插入/刪除等操作時,性能優于AVL樹,所以平衡樹的應用基本都是紅黑樹。
總結
- 上一篇: 平衡二叉树理论详解
- 下一篇: 视频文件格式解析之 3GP/MP4