樹-數據結構與算法(學習記錄過程筆記)

一、樹的定義?
     程序中什麼是樹? 
     符合下面兩點定義的,可以成爲程序中的樹的結構:
     1、有且只有存在一個根節點
     2、有若干互不相交的子節點,從子節點出發,又是一個子樹,子樹也是一個樹(所以可以用遞歸的思想去求解樹)

二、樹的分類
    1. 普通樹: 滿足樹的定義的都是普通樹。
    2. 二叉樹:子節點最多隻有兩個節點的樹,即爲二叉樹。
        二叉樹的分類:
          2.1.一般二叉樹
          2.2.完全二叉樹: 最後一層葉子的深度不會比其他葉子節點的深度超過1(可以是1)
          2.3.滿二叉樹:葉子節點的深度都是一樣的,葉子節點都是滿的,即左右子節點都要有
          2.4. 平衡二叉樹:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。
          2.5. 二叉搜索樹: 它是一個平衡二叉樹,左子樹的值比根節點小,右子樹的值比根節點大。或左子樹的值比根節點大,右子樹的值比根節點小,它的子樹也是平衡二叉樹,它查找的時間複雜度爲O(log(n)), 效率比較高,極端的情況下,只有左子樹或右子樹的情況下,查找的時間複雜度爲O(n)

          2.6. 平衡二叉搜索樹(AVL樹): 它是二叉搜索樹,但是它是自平衡的二叉搜索樹。保證了二叉搜索樹不會出現極端的情況

          2.7. 紅黑樹:   紅黑樹是平衡二叉搜索樹的一種。下面拷貝百度百科的紅黑樹的性質

          

  • 紅黑樹是每個節點都帶有顏色屬性的二叉查找樹,顏色或紅色或黑色。在二叉查找樹強制一般要求以外,對於任何有效的紅黑樹我們增加了如下的額外要求:
  • 性質1:節點是紅色或黑色。
  • 性質2:根節點是黑色。
  • 性質3:每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
  • 性質4:從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
  • 這些約束強制了紅黑樹的關鍵性質: 從根到葉子的最長的可能路徑不多於最短的可能路徑的兩倍長。結果是這個樹大致上是平衡的。因爲操作比如插入、刪除和查找某個值的最壞情況時間都要求與樹的高度成比例,這個在高度上的理論上限允許紅黑樹在最壞情況下都是高效的,而不同於普通的二叉查找樹。
  • 是性質3導致路徑上不能有兩個連續的紅色節點確保了這個結果。最短的可能路徑都是黑色節點,最長的可能路徑有交替的紅色和黑色節點。因爲根據性質4所有最長的路徑都有相同數目的黑色節點,這就表明了沒有路徑能多於任何其他路徑的兩倍長。在很多樹數據結構的表示中,一個節點有可能只有一個子節點,而葉子節點不包含數據。用這種範例表示紅黑樹是可能的,但是這會改變一些屬性並使算法複雜。爲此,本文中我們使用 “空(null)葉子”,如上圖所示,它不包含數據而只充當樹在此結束的指示。這些節點在繪圖中經常被省略,導致了這些樹好象同上述原則相矛盾,而實際上不是這樣。與此有關的結論是所有節點都有兩個子節點,儘管其中的一個或兩個可能是空葉子。


          2.5. 哈夫曼樹: 帶權的二叉樹
     
         
          2.8. ...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章