樹是一種非線性的資料結構,右n(n>=0)個結點組成的有限集合,如果n=0,稱為空樹,如果n>0,則:
每個結點只有乙個雙親,所以選擇順序儲存佔主要
以一組連續空間儲存樹的結點,同時在每個結點中,附設乙個指示其雙親結點位置的指標域
1.結點結構
2.結點結構定義
/*樹的雙親表示法結點結構定義*/#define max_tree_size 100
typedef int telemtype;
typedef struct ptnode //結點結構
ptnode;
typedef struct //樹結構
3.優缺點分析
缺點:由上向下找就十分慢,若要找結點的孩子或者兄弟,要遍歷整個樹4.改進一:方便獲取孩子結點在雙親結點基礎上加入孩子結點位置,由於可能乙個結點有多個子樹,所以我們要根據數的度來設定新增幾個孩子結點的元素樹的度為3,所以我們在結點結構設定上新增3個指標域,指向孩子結點,若是孩子為空則位置為-1/*樹的雙親表示法結點結構定義*/#define max_tree_size 100
typedef int telemtype;
typedef struct ptnode //結點結構
ptnode;
typedef struct //樹結構
缺點:這樣消耗了大量的空間,是不必要的,
我們盡可能使用較小的空間,所以我們一般只新增乙個長子域,可以獲取到有0個或1個孩子結點,甚至兩個子樹都可以獲取,但是對於較多的孩子我們若是非得使用順序儲存,就得使用上面方法。
注意:長子域是最左邊孩子的域
/*樹的雙親表示法結點結構定義*/#define max_tree_size 100
typedef int telemtype;
typedef struct ptnode //結點結構
ptnode;
typedef struct //樹結構
5.改進二:方便獲取各兄弟之間的關係
我們只需要增加乙個有兄弟域,即可依次獲取所有的兄弟結點/*樹的雙親表示法結點結構定義*/#define max_tree_size 100
typedef int telemtype;
typedef struct ptnode //結點結構
ptnode;
typedef struct //樹結構
儲存結構的設計是乙個十分靈活的過程。乙個儲存結構設計是否合理,取決於基於該儲存結構的運算是否合適,方便,時間複雜度好不好等。例如若是我們既關注孩子又關注兄弟,而且對時間遍歷要求高,那麼我們可以擴充套件上面結構含有雙親域,長子域,右兄弟域
由於每個結點可有多個子樹(無法確定子樹個數),可以考慮使用多重鍊錶來實現。根據樹的度來設定孩子域的個數,例如本例中度為3,設定3個孩子域/*樹的孩子表示法結點結構定義*/#define max_tree_size 100
typedef int telemtype;
typedef struct ptnode //結點結構
ptnode;
typedef struct //樹結構
缺點:占用了大量不必要的孩子域空指標
以其為標準:需要3n個指標域,實際上有用n-1個(除了根節點,其他n-1個都向上需要一條邊),則有2n+1個無用,浪費改進一:為每個結點新增乙個結點度域,方便控制指標域的個數缺點:維護困難,不易實現
改進三:結合順序結構和鏈式結構
/*樹的孩子表示法結點結構定義*/改進四:新增雙親域,方便查詢雙親結點(雙親孩子表示法)#define max_tree_size 100
typedef int telemtype;
typedef struct ctnode //孩子結點
*childptr;
typedef struct //表頭結構
ctbox;
typedef struct //樹結構
ctree;
/*樹的孩子表示法結點結構定義*/#define max_tree_size 100
typedef int telemtype;
typedef struct ctnode //孩子結點
*childptr;
typedef struct //表頭結構
ctbox;
typedef struct //樹結構
ctree;
上面從雙親,孩子角度研究樹的結構,下面我們從樹的結點的兄弟角度來研究任意一棵樹,他的結點的第乙個孩子如果存在就是唯一結點,他的右兄弟如果存在,也是唯一的,因此,我們設定兩個指標,分別指向該結點的第乙個孩子和該結點的右兄弟n個結點,有2n個指標域,有n-1條邊,空n+1個指標域typedef int telemtype;typedef struct csnode
csnode,*cstree;
若有需要,可以再加入乙個雙親域,但是上面的結構以及轉換為二叉樹,我們可以使用二叉樹的一系列方法,來解決問題資料結構 樹
樹的概念 1.家族樹 在現實生活中,有入如下血統關係的家族可用樹形圖表示 張源有三個孩子張明 張亮和張麗 張明有兩個孩子張林和張維 張亮有三個孩子張平 張華和張群 張平有兩個孩子張晶和張磊。以上表示很像一棵倒畫的樹。其中 樹根 是張源,樹的 分支點 是張明 張亮和張平,該家族的其餘成員均是 樹葉 而...
資料結構 樹
1 定義 樹是一種非線性結構,是一種一對多的資料結構。分析樹的結構,我們用遞迴的方法,根結點下面又可以看做是子樹。2 樹的儲存結構 我們一般用孩子兄弟法儲存。也就是把乙個結點的左邊第乙個孩子放在此結點的左邊孩子,把此結點的右兄弟放在此結點的右邊孩子。這樣就產生了二叉樹。二叉樹和樹可以相互對應。3 二...
資料結構 樹
二叉樹性質回顧 滿二叉樹 完全二叉樹等 給定一棵二叉樹,要求分層遍歷該二叉樹,即從上到下按層次訪問該樹,每一層單獨輸出一行,每一層要求訪問的順序為從左到右。我們在遍歷的過程中將該層節點的孩子節點壓入乙個佇列,這樣就可以實現從上到下一層一層地遍歷該二叉樹。層序遍歷 並分層列印 如果不用分層的話只用佇列...