數據結構(六):樹

一、樹的定義

ADT Tree{ ​ 數據對象: ​ D={1=<i<=n, n>=0, a(i)屬於 ElemType類型} ​ 數據關係: ​ R={<a(i), a(j)> | a(i), a(j)屬於 D, 1=<i<=n, 1=<j<=n, 其中每個元素只有一個前驅,可以有零個或多個後繼,有且僅有一個元素沒有前驅} ​ 基本運算: ​ InitTree(&t):初始化樹:構造一棵空樹 t。 ​ ClearTree(&t):銷燬樹:釋放樹 t所佔胡空間。 ​ Parent(t):求元素 t的前驅。 ​ Sons(t):求元素 t的所有後繼。 }

二、樹的存儲結構

1、雙親存儲結構

這種存儲結構是一種順序存儲結構,用一組連續空間存儲樹的所有節點,

同時在每個節點中設置一個僞指針指示雙親節點的位置。 結構體類型定義:

typedef struct{
    ElemType data;
    int parent;
} PTree[MaxSize];

2、孩子存儲結構

這種存儲結構中,每個節點不僅包含數據,還包括指向所有孩子節點的指針。 按照樹的度設計節點的最大孩子節點個數。 結構體定義如下:

typedef struct node{
    ElemType data;
    struct node* sons[MAX_SONS];
} TSonNode;

3、孩子兄弟鏈存儲結構

這個存儲結構爲每個節點設計三個域:一個數據元素域、一個指向當前節點第一個字節點的指針域、一個指向該節點下一個兄弟節點的指針域。 結構體類型定義:

typedef struct tnode{
    ElemType data;
    struct tnode* first_son;
    struct tnode* next_brother;
} TSBNode;

三、樹的基本運算

  1. 尋找某種滿足特定關係的節點,如尋找當前節點的雙親節點。
  2. 插入或刪除某個節點,如在樹的當前節點上插入一個新節點或刪除當前節點的第 i個孩子節點。
  3. 遍歷樹中的每個節點。

1、樹的遍歷

1、先根遍歷

​ (1)訪問根節點。

​ (2)按照從左到右的順序先根遍歷根節點的每一棵子樹。

2、後根遍歷

​ (1)按照從左到右的順序後根遍歷每一棵子樹。

​ (2)訪問根節點。

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