怎麼把二叉樹的鏈式儲存結構轉化為順序儲存結構

2021-09-15 00:09:05 字數 1624 閱讀 2945

1樓:匿名使用者

1、建立乙個單鏈表,並從螢幕顯示單鏈表元素列表。

2、從鍵盤輸入乙個數,查詢在以上建立的單鏈表中是否存在該數;如果存在,顯示它的位置;如果不存在,給出相應提示。

3、在上述的單鏈表中的指定位置插入指定的元素

4、刪除上述單鏈表中指定位置的元素。

源程式:標頭檔案

#include

#include

typedef char elemtype;

typedef int status;

#define ok 1

#define error 0

typedef struct lnodelnode,*linklist;

void about()

void showmenu()

cout

cout<<"逆序輸入 n 個資料元素,建立帶頭結點的單鏈表"< 0; --i)

} // l是帶頭結點的連結串列的頭指標,以 e 返回第 i 個元素

// 本演算法在連結串列中第i 個結點之前插入新的元素 e

status listinsert_l(linklist l, int i, elemtype e)

#include"linklist.h"

void main()

//3.連結串列插入元素

case 4:

//4.連結串列刪除元素

default:cout<<"輸入錯誤,請輸入-5,輸入重顯示功能表^_^ "<>choice; } }

2樓:曉凡

二叉樹的鏈式儲存是指:兩個兒子結點分別用指標指向。而儲存結構值的是:

假設該結點在陣列中的位置為 i ,則它的左兒子的位置為 2i ,右兒子為 2i + 1. ( i 從1開始)

所以你只要建立乙個陣列,從鏈式儲存的根節點開始,用中序遍歷遍歷樹,按中序遍歷的順序儲存在陣列中。即可完成順序儲存結構的轉化。

相關的遍歷你可以檢視相關資料,中序遍歷即訪問順序為左兒子-根-右兒子的順序訪問。

希望對你有所幫助。

為什麼說二叉樹是非線性儲存結構?不是說二叉樹可以順序儲存和鏈式儲存嗎?感覺順序儲存是線性的呀?怎麼

3樓:遊赤壁

線性是線性,順序是順序,線性是邏輯結構,順序是儲存結構,兩者不是乙個概念。線性是指乙個節點只有乙個子節點,而樹,或二叉樹乙個節點後有多個子節點,且子節點不能相互聯絡。

4樓:匿名使用者

線性是陣列那樣,鏈就是有節點,,

二叉樹順序儲存

5樓:匿名使用者

順序儲存的話,就是儲存在陣列中,陣列

的下標就是二叉樹的結點位置(層次結構),專比如結點屬a,在陣列中就是位置0,b就是1,c就是2....,以此類推,所以第i個結點的在陣列中的位置就是i(i從0開始),i的兩個孩子結點在陣列中的位置是2i+1和2i+2

二叉樹兩種儲存結構的優缺點,雜湊表和二叉樹的優缺點對比,如何在這兩種資料結構中選擇

順序儲存可能會浪費空間 在非完全二叉樹的時候 但是讀取某個指定的節點的時候效率比較高o 0 鏈式儲存相對二叉樹比較大的時候浪費空間較少,但是讀取某個指定節點的時候效率偏低o nlogn 二叉樹的順序儲存,尋找後代節點和祖先節點都非常方便,但對於普通的二叉樹,順序儲存浪費大量的儲存空間,同樣也不利於節...

資料結構二叉樹的遍歷,C語言資料結構 二叉樹的遍歷

前序 根,左兒子,右兒子 中序 左兒子,根,右兒子 後序 左兒子,右兒子,根 首先是要牢記一上幾句話 比如這棵樹的中許遍歷,a有左兒子,先不訪問a,以此類推,直到d沒有左兒子,訪問d,然後訪問d的根b,然後應該訪問b的右兒子,但是b沒有,所以訪問b的根a,訪問完a以後訪問a的右子樹。先看c,c有左兒...

如何將二叉樹轉變為森林,將二叉樹轉化為樹森林?

左孩子,右兄弟 凡是右子樹都斷開,就是森林了 資料結構上應該有方法呀,有了方法就是把方法用乙個程式語言描述下了,是吧?寫什麼程式啊,這純粹就乙個理論問題。如按左子 右兄弟的方法,二叉樹和森林的計算機內部表示根本就是一樣的,不用轉換,就看你怎麼用了。將二叉樹轉化為樹 森林 二叉樹轉bai換為森林 前提...