c語言數據結構學習心得——樹


一對多的樹型結構,有且只有一個特定的根結點。

結點的度:結點擁有子樹的數量{

                                       度為0:葉子結點/終端結點。

                                       度不為0:非終端結點/分支結點(除去根結點其它稱為內部結點)。}

樹的度:樹中所有結點的度數的最大值。

樹的層次:根為第一層,以此類推。

結點的深度:根結點開始,自頂向下累加。

結點的高度:葉結點開始,自底向上累加。

樹的高度(深度):樹中結點的最大層數。

 

結點關系:

祖先結點:根結點到該點的唯一路徑上的任意結點。

子孫結點

雙親結點:根結點到該點的唯一路徑上的最近結點。

孩子結點

兄弟結點:有相同雙親結點的結點。

 

樹中的數學關系:

1.樹中的結點數等於所有結點的度數加1。

2.度為m的樹中第i層上最多有mi-1個結點。

3.高度為h的m叉樹至多有(mn-1)/(m-1)個結點。

4.具有n個結點的m叉樹的最小高度為[logm(n(m-1)+1)]

 

樹的存儲結構

順序存儲結構

雙親表示法:用一組連續的存儲空間存儲樹的結點,同時在每個結點中,用一個變量存儲該結點雙親結點在數組中的位置。typedef char ElemType;

typedef struct TNode{ ElemType data; //結點數據
     int parent;              //該結點雙親在數組的下標
}TNode;                       //結點數據類型

#define MaxSize 100
typedef struct{
TNode nodes[MaxSize]; //結點數組
int n; //結點數量
}Tree; //樹的雙親表示結構

 

鏈式存儲結構

孩子表示法:把每個結點的孩子結點排列起來存儲成1個單鏈表,所以n個結點有n個鏈表;

                      葉子結點鏈表為空;

                      n個單鏈表的頭指針又存儲在一個順序表(數組)中。

孩子鏈表結點代碼:

typedef char ElemType;
typedef struct CNode{
   int child;         //該孩子在表頭的數組下標
   struct CNode *next;//指向該結點的下一個孩子結點
}CNode,*child         //孩子結點數據類型

每個孩子鏈表的表頭結點(存在數組中):

typedef struct{
    ElemType data;    //結點數據域
    child first child;//指向該結點的第一個孩子結點
}TNode;               //孩子結點的數據類型
#define MaxSize 100
typedef struct{
     TNode nodes[MaxSize];//結點數據域
     int n;               //樹中結點數量
}Tree;                    //樹的孩子表示結構

孩子兄弟表示法:存儲孩子結點和兄弟結點。

typedef char ElemType;
typedef struct CSNode{
   ElemType data;                   //該結點數據域
   struct CSNode *firsrchild,*right;//指向該結點的第一個孩子結點和該結點的右兄弟結點
}CSNode                             //孩子兄弟結點數據類型

 


免責聲明!

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



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