數據結構:樹

1.樹定義算法

  專業定義:數據庫

    1.有且只有一個稱爲根的結點數組

    2.有若干個互不相關的子樹,這些子樹自己也是一棵樹性能

  通俗定義操作系統

    1.樹是由結點和邊組成3d

    2.每個結點只有一個父節點,但能夠有多個子節點指針

    3.但有一個結點例外,該節點沒有父節點,此結點稱爲根結點對象

  專業術語blog

    結點  父節點  子節點  子孫  堂兄弟繼承

    深度:

      從根結點到最底層結點的層數稱之爲深度

      根結點是第一層

    葉子結點:

      沒有子結點的結點

    非終端結點:

      實際就是非葉子結點

    度:

      子結點的個數稱爲度

2.樹分類

  通常樹

    任意一個結點的子結點的個數都不受限制

  二叉樹

    任意一個結點的子結點個數最多兩個,且子結點的位置不可更改(序號)

    分類:

      通常二叉樹

      滿二叉樹

        在不增長樹的層數的前提下,沒法添加一個結點的二叉樹就是滿二叉樹

        一個結點的二叉樹就是滿二叉樹

      徹底二叉樹(必須是滿的而後再砍)

        若是隻是刪除了滿二叉樹最底層最右邊的連續若干個結點

        這樣造成的二叉樹就是徹底二叉樹

        (滿二叉樹是徹底二叉樹的特例,就是一個不刪)

      森林

        n個互不相交的樹的集合

 

  紅的是通常二叉樹

  藍的是補充爲 滿二叉樹

  黃色的是砍除部分,稱爲徹底二叉樹

3.樹的存儲

  (1)二叉樹的存儲

    連續存儲【徹底二叉樹】(根據序號和算法等)

       優勢:

        查找某個結點的父結點和子結點(也包括判斷有沒有子節點)速度很快

      缺點:  

        耗用內存空間過大

    鏈式存儲(根據指針域指向來存儲)

 

  (2)通常樹的存儲

    雙親表示法

      求父節點方便

      (經過結構體數組或類來存儲子節點數據以及父節點的下標)

    孩子表示法

      求子節點方便

      (經過鏈表來存儲子節點)

    雙親孩子表示法

      求父節點和子節點都很方便

      (結合前兩種,操做比較複雜)

    二叉樹表示法

       把一個普通樹轉化成二叉樹來存儲

       具體轉換方法:

          設法保證任意一個結點的

            左指針域指向第一個孩子

            右指針域指向它的兄弟

       只要知足就能夠把一個普通樹轉化成二叉樹 

          一個普通樹轉化成二叉樹必定沒有右子樹

          

  (3)森林的存儲

    相似於通常樹的二叉樹表示法

 

  

4.二叉樹操做

  遍歷

    先序遍歷【先訪問根結點】

      先訪問根結點

      再先序訪問左子樹

      再先序訪問右子樹

    中序遍歷【中間訪問根結點】

      中序遍歷左子樹

      再訪問根結點

      再中序遍歷右子樹

    後序遍歷【最後訪問根結點】

      中序遍歷左子樹

      中序遍歷右子樹

      再訪問根結點 

  已知兩種遍歷序列求原始二叉樹

      經過先序和中序,或者中序和後序能夠還原出原始二叉樹

      可是經過先序和後序沒法還原出原始的二叉樹

      先序和中序:經過先序第一個來判斷根結點,以後找到中序的那個根結點後,截斷左

            邊,再找先序中根結點後下一個字母,截斷該字母左和右

      中序和後序:經過後序第一個來判斷根結點,操做與先序只是從後開始的區別

5.應用

  樹是數據庫中數據組織的一種重要形式

  操做系統子父系統的關係自己就是一棵樹

  面嚮對象語言中類的繼承關係

 

  赫夫曼樹

   (1)術語

    結點的路徑長度:從根結點到該結點的路徑上的鏈接數

    樹的路徑長度:樹中每一個葉子結點的路徑長度之和

    結點帶權路徑長度:結點的路徑長度與結點權值的累加

    樹的帶權路徑長度:WPL 樹的全部葉子結點的帶權路徑長度之和

   (2)舉例

    

 

             左邊                    右邊

    結點的路徑長度: A:1 B:2 C:3 D:3                A:3 B:3 C:2 D:1

    樹的路徑長度:  1+2+3+3=9                 1+2+3+3=9

    結點帶權路徑長度:A:1*5=5 B:2*15=30 C:3*70=210   D:3*10=30        A:15 B:45 C:140   D:10

    樹的帶權路徑長度:275                    210

    左邊的WLP大於右邊,因此右邊效率更好(WLP越小二叉樹性能越高效)

相關文章
相關標籤/搜索