資料結構與演算法4 樹的基本儲存結構

2021-06-20 06:14:07 字數 1031 閱讀 9697

樹的儲存結構主要由雙親表示法和孩子表示法,以及它們的各種改造版本。

雙親表示法:

雙親表示法是指在每個節點中表示它的父節點的位置。整個樹的節點作為乙個陣列或鍊錶存放。

/*雙親表示法*/

typedef struct

node;

typedef struct

tree;

孩子表示法:

孩子表示法是指給每個節點加上孩子的資訊。如果樹的度確定,比如二叉樹,那麼可以直接在每個節點中儲存每個孩子的指標,很簡單有效,不多說了。但是對於度不確定或者很大的情況下,這樣的儲存方式是非常浪費空間的。因此還有另一種表示方法,節點存放於線性表中,每個節點的全部孩子節點的資訊組成乙個鍊錶,該節點的指標指向這個鍊錶,鍊錶以nil表示結束。這樣的儲存結構儘管也有一小部分nil指標,但減少了很多,而且比較靈活。

/*孩子表示法 孩子鍊錶形式*/

typedef struct child

child;

typedef struct

node;

typedef struct

tree;

孩子兄弟表示法:

孩子兄弟表示法實際上是用乙個二叉樹來表示樹的結構。每個節點的乙個指標指向第乙個孩子,第二個指標指向右邊的第乙個兄弟節點。這種儲存方式節省空間,操作方便,但樹的原本的層次結構被破壞了。

孩子雙親表示法:

孩子雙親表示法是對上面兩種方法的綜合。雙親表示法不便從上往下查詢,孩子表示法不便從下網上查詢,那麼孩子雙親表示法就把兩種資訊都放到一起,這樣可以有更好的訪問速度,但是也會占用更多空間。

二叉樹作為一種特殊的樹,可以有其他的儲存方式。

順序儲存:假如是完全二叉樹或者接近完全二叉樹,那麼可以按照層序關係直接順序排列,因為根據公式可以知道每個元素應該在**。缺點是僅適用於接近滿的二叉樹,否則很浪費空間。

二叉鍊錶:完全按照樹的結構,用指標連起來。最直觀的方式,也很省空間。

三叉鍊錶:比二叉鍊錶多了乙個向上的指標。這個看具體情況吧。

資料結構與演算法(4) 樹

結點的度 乙個結點含有的子樹的個數稱為該結點的度 葉結點 度為0的結點稱為葉結點,也可以叫做終端結點 分支結點 度不為0的結點稱為分支結點,也可以叫做非終端結點 結點的層次 從根結點開始,根結點的層次為1,根的直接後繼層次為2,以此類推 結點的層序編號 將樹中的結點,按照從上層到下層,同層從左到右的...

資料結構與演算法系列 串 串的基本概念與儲存結構

串是一種特殊的線性表,他的資料物件是字符集和,它的每個元素都是乙個字元一系列相連的字元就組成了乙個字串,簡稱串 串的描述 s a1a2a3.an n 0 n稱為串的長度 線性表的順序儲存結構和鏈式儲存結構對於串來說都是適用的。串的靜態儲存結構採用順序儲存結構,簡稱順序串。描述 typedef str...

資料結構與演算法知識樹整理 資料結構篇 線性結構

低效的 插入 和 刪除 容器能否完全替代陣列?為什麼大多數程式語言中,陣列要從 0 開始編號,而不是從 1 開始呢?單鏈表雙向鍊錶 刪除給定指標指向的結點。迴圈鍊錶 鍊錶 vs 陣列效能大比拼 如何實現乙個 棧 棧的應用 順序佇列和鏈式佇列 迴圈佇列 public class circularque...