1. 程式人生 > >數據結構--樹

數據結構--樹

鏈式 底層 nbsp src one pan 方法 分享 完全二叉樹

1、樹的一些定義

  1.1 樹

    有且只有一個稱為根的節點;

    有若幹個互不相交的子樹,這些子樹本身也是一棵樹。

    技術分享

  1.2 深度

從根節點到最底層節點的層數成為深度,根節點是第一層。

  1.3 度

    最大子節點的個數稱之為度。

2、樹分類

  2.1 一般樹

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

  2.2 二叉樹

    任意一個節點的子節點個數最多兩個,且子節點的位置不可更改。

    分類

      一般二叉樹

      滿二叉樹

        在不增加樹深度的情況下,無法再添加一個節點的二叉樹是滿二叉樹。

      完全二叉樹

        如果只刪除了最底層最右邊的連續若幹個節點,這樣形成的二叉樹就是完全二叉樹。

  2.3 森林

    n個互不相交的樹的集合

3、樹的存儲

  3.1 二叉樹的存儲

    連續存儲

      優點:

        查找某個節點的父節點和子節點

      缺點

        耗用內存空

    鏈式存儲

  3.2 一般樹的存儲

    雙親表示法

      求父節點方便

    孩子表示法  

      求子節點方便

    雙親孩子表示法

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

    二叉樹表示法

      把一個普通樹轉換為二叉樹來存儲

      具體方法:

        設法保證任意一個節點的左指針域向它的第一個孩子,右指針域指向它的堂兄弟,只要滿足此條件,就可以把一個普通樹轉化為二叉樹。

  3.3 森林的存儲

    先把森林轉化為二叉樹,再存儲二叉樹。

4、樹操作

  4.1 先序遍歷

    1.   先訪問根節點
    2.   再先序訪問左子樹
    3.   再先序訪問右子樹

  4.2 中序遍歷

    1.   先中序訪問左子樹
    2.   再訪問根節點
    3.   再中序訪問右子樹

  4.3 後續遍歷

    1.    先後序訪問左子樹
    2.   再後序訪問右節點
    3.   再訪問根節點

數據結構--樹