資料結構(C語言)樹的儲存結構

2021-10-07 21:40:56 字數 1861 閱讀 6010

1、雙親表示法

實現:定義結構陣列,存放樹的結點,每個結點包含兩個域:

資料域:存放結點本身資訊

雙親域:指示本結點的雙親結點在陣列中的位置

陣列下標

data

parent0r

-11a0

2b03

c04d

15e1

6f37

h68h

69k6

特點:找雙親容易,找孩子難

**實現

typedef

struct ptnode

ptnode;

#define max_tree_size 100

typedef

struct

ptree;

2、孩子鍊錶

把每個結點的孩子結點排列起來,看成是乙個線性表,用單鏈表儲存。n個結點有n個孩子鍊錶(葉子的孩子鍊錶為空表)。而n個頭指標又組成了乙個線性表,用順序表(含n個元素的結構陣列)儲存。

結點結構

**實現

typedef

struct ctnode//孩子結點結構

*childptr;

typedef

struct ctbox//雙親結點結構

ctbox;

typedef

struct ctree

ctree;

3、孩子兄弟表示法

**實現

優點缺點

雙親表示法

尋找結點的雙親結點效率高

尋找結點的孩子結點效率低

孩子表示法

尋找結點的孩子結點效率高

尋找結點的雙親結點效率低

孩子兄弟表示法

尋找結點的孩子結點效率高,方便實現樹轉換為二叉樹

尋找結點的雙親效率低

將樹轉換成二叉樹

加線:在兄弟之家加一連線

抹線:對每個結點,除了其左孩子外,去除其與其餘孩子之間的關係

旋**以樹的根結點為軸心,將整樹順時針轉45°

加線:若p結點是雙親結點的左孩子,則將p的右孩子,右孩子的右孩子…沿分支找到所有的右孩子,都與p的雙親用線連起來

抹線:抹掉原二叉樹中雙親域右孩子之間的連線

調整:將結點按層次排列,形成樹結構

森林轉換成二叉樹(二叉樹與多棵樹之間的關係)

將各棵樹分別轉換成二叉樹

將每棵樹的根結點用線相連

以第一棵樹根結點為二叉樹的跟,再以根結點為軸心,順時針旋轉,構成二叉樹型結構

二叉樹轉換成森林

抹線:將二叉樹中根結點與其右孩子連線,及沿右分支搜尋到的所有右孩子間連線全部抹掉,使之變成孤立的二叉樹

還原:將孤立的二叉樹還原成樹

資料結構之樹的儲存結構

樹是一種一對多的資料結構,這個一對多很好解釋,就比如乙隻狗媽媽,會有多隻小奶狗,這不就有一對多的意思嗎!樹的根節點有且只有乙個,就比如小奶狗們只有乙個親狗媽。那麼圖上的 b c d e 都是樹的根節點 a 的孩子 總之,樹就是有很多結點構成,只不過這些結點在樹中會有不同的稱呼,來分析一下下圖 度 結...

《資料結構》樹的儲存結構2019 10 15

定義 1 只有乙個根結點 2 其餘結點為幾個不相交的有限集,他們本身也是一棵樹,且被稱為根的子樹。樹的定義就用到了遞迴的方法。幾個概念 結點的度 該結點擁有的子樹的數量 葉結點 度為0的結點 樹的度 結點度的最大值 層次 根結點為第一層,其孩子為第二層,以此類推。深度 結點的最大層數 高度 數量和深...

資料結構中的樹儲存結構

圖1 樹的示例 圖 1 a 是使用樹結構儲存的集合 的示意圖。對於資料 a 來說,和資料 b c d 有關係 對於資料 b 來說,和 e f 有關係。這就是 一對多 的關係。將具有 一對多 關係的集合中的資料元素按照圖 1 a 的形式進行儲存,整個儲存形狀在邏輯結構上看,類似於實際生活中倒著的樹 圖...