淺談基礎算法之二叉樹和AVL樹(二)


 
 
  承接上文 淺談大型網站的算法和架構(一) ,我們繼續聊我們的話題。
  上文中很多人提到不扣題,這只是一部分資料,所以會感覺到不扣題,主要是題目太大了,而且內容太多了,我只能一部分一部分的寫出來,望大家見諒。
  

  我們老大也只講到上,還有中和下呢!
  上偏重於基礎部分——就是算法部分。里面包括現今架構中的產品使用的算法,讓我們了解產品本質的一些東西。需要到伸展樹這一篇開始才能真正講到相關架構產品。

  中和下他還沒開始呢!估計也夠我研究一段時間了。大家就權當了解下算法吧!

 
二叉樹
 
 上文中提到的兩個結構(數組和鏈表)各有弊端。
  1》數組在更新的時候比較消耗資源,需要挨個挪動后面的元素。
  2》而鏈表在查詢的時候需要從頭挨個對比之后選擇出要查詢的內容。

 
  綜上我們需要一個查詢更快,更新更快的結構,於是我們有了二叉樹。
 特點:
  每個結點最多有兩棵子樹。

找80
 
 
我們來看看代碼實踐:

                                    讓我們運行起來看看

插入82
 

我們來看看代碼實踐(注意:在原有的代碼上加了一個方法insert_bit_tree):

                                    讓我們運行起來看看

二叉樹的煩惱

 

我們不難發現如果在一個很極端的情況下,查找某個數據,那么會出現上圖的情況。你猜想一下,如果是幾千萬條數據,會出現什么情況呢?


由於上述原因,我們想到了平衡二叉樹,又叫AVL樹。

平衡二叉樹:AVL Tree(1962)
 

讓我們看看代碼實踐。

                                    主要理解一下這段代碼 

                                    對該函數進行圖解。

 


由於篇幅太長,下篇將繼續介紹。

 
 
推薦
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM