當前位置:首頁 » 存儲配置 » 樹結構用什麼存儲結構

樹結構用什麼存儲結構

發布時間: 2025-08-12 01:58:06

㈠ 二叉樹的兩種物理結構是什麼

答:二叉樹就物理結構來分可以分成:順序存儲結構和鏈式存儲結構。
(1)順序存儲結構:
順序存儲結構,顧名思義就是二叉樹的數據元素存放在一組連續的存儲單元中。其主要有一下幾個特點:
①邏輯上相鄰的兩個元素在物理位置上也是相鄰的;
②操作刪除和插入的時候,需要整體移動元素;
③需要預先分配空間,不能動態增長;
(2)鏈式存儲結構:
鏈式存儲結構中二叉樹的每個結點至少包含三個域:數據域、左指針域和右指針域。其二叉樹是通過指針實現,鏈式存儲結構有以下幾個特點:
①邏輯上相鄰的兩個元素在物理位置上不一定是相鄰的;
②操作刪除和插入的時候,不需要整體移動元素;只需要修改相應的指針即可;
③不需要預先分配空間;
④存儲指針本身會消耗一定的存儲的空間;

㈡ 樹 - 二叉樹 - 二叉樹的存儲結構(二)

鏈式存儲結構

結點的結構

二叉樹的每個結點最多有兩個孩子 用鏈接方式存儲二叉樹時 每個結點除了存儲結點本身的數據外 還應設置兩個指針域

lchild和rchild 分別指向該結點的左孩子和右孩子 結點的結構為

結點的類型說明

typedef char DataType; //用戶可根據具體應用定義DataType的實際類型

typedef struct node{

DataType data;

Struct node *lchild *rchild; //左右孩子指針

}BinTNode; //結點類型

typedef BinTNode *BinTree;//BinTree為指向BinTNode類型結點的指針類型

二叉鏈表(二叉樹的常用鏈式存儲結構)

在一棵二叉樹中 所有類型為BinTNode的結點 再加上一個指向開始結點(即根結點)的BinTree型頭指針(即根指針)root 就構

成了二叉樹的鏈式存儲結構 並將其稱為二叉鏈表

【例】下面左圖所示二叉樹的二叉鏈表如下面中圖所示

注意

① 一個二叉鏈表由根指針root惟一確定 若二叉樹為空 則root=NULL;若結點的某個孩子不存在 則相應的指針為空

② 具有n個結點的二叉鏈表中 共有 n個指針域 其中只有n 個用來指示結點的左 右孩子 其餘的n+ 個指針域為空

帶雙親指針的二叉鏈表

經常要在二叉樹中尋找某結點的雙親時 可在每個結點上再加一個指向其雙親的指針parent 形成一個帶雙親指針的二叉鏈表

【例】上面右圖是上面左圖所示的二叉樹的帶雙親指針的二叉鏈表

注意

二叉樹存儲方法的選擇 主要依賴於所要實施的各種運算的頻度

lishixin/Article/program/sjjg/201311/23885

㈢ 樹的存儲結構

樹的存儲結構與遍歷


樹的存儲結構主要有三種方式:雙親表示法、孩子表示法和孩子兄弟表示法。


1. 雙親表示法通過數組結構存儲,如PTree類型,每個結點包含數據和指向雙親的索引。例如,MAX-TREE-SIZE定義了最大結點數,每個結點如PTNode所示。


2. 孩子表示法通過鏈表結構存儲,如CTree類型,每個結點包含指向孩子和下一個兄弟的指針。雙親與孩子鏈表頭指針結合,如CTBox結構。


3. 孩子兄弟表示法,每個結點有firstchild和nextsibling,如CSNode和CSTree,用於表示二叉樹或二叉鏈表。


對於樹的遍歷,先根序和後根序是兩種基本方法,森林的遍歷則是基於樹的遍歷,包括先序遍歷和中序遍歷。


森林與二叉樹之間的轉換有自然轉換法,如將森林轉換為二叉樹時,連接兄弟節點並調整連線方向,反之,將二叉樹轉換為森林則需要連接相關節點並去掉多餘的連線。

熱點內容
提高存儲量 發布:2025-08-12 04:48:28 瀏覽:302
安卓手機自動更新在哪裡關 發布:2025-08-12 04:47:11 瀏覽:433
潁上編程課 發布:2025-08-12 04:32:45 瀏覽:854
信號量源碼 發布:2025-08-12 04:17:08 瀏覽:114
創維盒子本地配置怎麼下載應用 發布:2025-08-12 04:17:08 瀏覽:828
扇貝加密 發布:2025-08-12 04:16:28 瀏覽:697
c語言雙向鏈表 發布:2025-08-12 04:00:52 瀏覽:573
python黃金 發布:2025-08-12 03:47:50 瀏覽:431
編譯文件如何反復 發布:2025-08-12 03:47:17 瀏覽:819
wog二追腳本 發布:2025-08-12 03:39:23 瀏覽:667