1. 數據結構中樹的存儲問題
在樹結構中有雙親表示法、孩子表示法、孩子兄弟表示法等,其中雙親表示法,屬順序存儲結構,孩子表示法、孩子兄弟表示法以屬鏈式存儲
2. 數據結構,樹的常用存儲方式
存入文本文件,每行:孩子節點-父節點。
這樣也方便用Hadoop進行處理。
3. 完全二叉樹用什麼數據結構實現最合適,為什麼
一般的二叉樹用帶有兩個指向自身結構類型變數的指針的多個結構體組成最合適。
如果該二叉樹不會變化,可以用數組實現,每個數組元素表示一個節點,因為是完全的,所以長度一定是2的n次方-1,n為樹的深度,也可以很方便地算出某個元素與樹根節點、父節點等的關系,因此不用指針反而可以減少存儲開銷及查詢效率。
4. 有關數據結構二叉樹存儲結構類型的,求助大神解答
圖中的第一行是定義了一個叫做DataType的類型就是char類型。 接下來定義了一個叫做BinTNode的二叉樹結點類型,它包含一個字元型的數據,還有兩個指向左右子樹的指針。 第三個定義數據類型是定義了一個指向二叉樹節點的指針叫做BinTree。 接下來的一個無返回值的函數f31( ),是一個先正向列印從根結點到最左下角結點的路徑,再反向列印一遍此路徑。 若二叉樹如圖中所示,則調用f31(T)的輸出結果為: ABDDBA
5. 【數據結構】樹的定義和樹的三種存儲結構
樹(Tree)是n(n>=0)個結點的有限集。n=0時稱為空樹。在任意一顆非空樹中:
假設以一組連續空間存儲數的結點,同時在每個結點中, 附設一個指示器指示其雙親結點到鏈表中的位置 。
把每個結點的孩子結點排列起來,以 單鏈表作為存儲結構 ,則n個結點有n個孩子鏈表,如果是葉子結點則此單鏈表為空。然後 n個頭指針又組成一個線性表,採用順序存儲結構 ,存放進一個一維數組中。
孩子表示法有兩種結點結構: 孩子鏈表的孩子結點 和 表頭數組的表頭結點
對於孩子表示法,查找某個結點的某個孩子,或者找某個結點的兄弟,只需要查找這個結點的孩子單鏈表即可。但是 當要尋找某個結點的雙親時 ,就不是那麼方便了。所以可以將雙親表示法和孩子表示法結合,形成 雙親孩子表示法 。
任意一棵樹,它的結點的第一個孩子如果存在就是唯一的,它的右兄弟存在也是唯一的。因此,設置兩個指針,分別指向該結點的第一個孩子和此結點的右兄弟。
6. 二叉樹是非線性數據結構,所以
二叉樹是非線性數據結構,所以(C、它能採用順序存儲結構和鏈式存儲結構存儲)。
一般而言,完全二叉樹(包括滿二叉樹)使用順序存儲,普通二叉樹一般用二叉鏈表或者三叉鏈表存儲。
二叉樹是n個有限元素的集合,該集合或者為空、或者由一個稱為根的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成,是有序樹。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也稱作一個結點。
(6)樹適合存儲什麼結構的數據擴展閱讀:
若對一棵有n個節點的完全二叉樹進行順序編號(1≤i≤n),那麼,對於編號為i(i≥1)的節點:
當i=1時,該節點為根,它無雙親節點。
當i>1時,該節點的雙親節點的編號為i/2。
若2i≤n,則有編號為2i的左節點,否則沒有左節點 。
若2i+1≤n,則有編號為2i+1的右節點,否則沒有右節點。
7. C語言中.二叉樹的順序存儲結構和二叉鏈表,三叉鏈表存儲結構各自的優缺點及適用場合.以及2叉樹的順序儲存結
鏈式結構優點都是便於定址,二叉鏈表缺點結構性開銷隨著數據結構的規模變大而變大(尤其是葉子節點都有2個NULL,即損失2*sizeof(ElemType*))
線性結構優點沒有結構性開銷,缺點個人感覺是插入和刪除不夠方便?
試用場合估計取決問題規模大小,即空間復雜度和時間復雜度
兩個相互轉化很簡單,只需明白的就是順序存儲中:
當前節點的父節點Parent(CurrentPos) = (CurrentPos - 1) / 2 取下界
左孩子Left(CurrentPos) = 2*CurrentPos + 1
右孩子Right(CurrentPos) = 2*CurrentPos + 2
左兄弟 = CurrentPos - 1
右兄弟 = CurrentPos + 1
轉換時只需講鏈式存儲結構的數據域的數據拷貝到順序存儲結構對應的位置即可
8. 順序存儲是二叉樹常用的存儲結構嗎
二叉樹的存儲結構
二叉樹是非線性結構,即每個數據結點至多隻有一個前驅,但可以有多個後繼。它可採用順序存儲結構和鏈式存儲結構。
1.順序存儲結構
二叉樹的順序存儲,就是用一組連續的存儲單元存放二叉樹中的結點。因此,必須把二叉樹的所有結點安排成為一個恰當的序列,結點在這個序列中的相互位置能反映出結點之間的邏輯關系,用編號的方法從樹根起,自上層至下層,每層自左至右地給所有結點編號,缺點是有可能對存儲空間造成極大的浪費,在最壞的情況下,一個深度為k且只有k個結點的右單支樹需要2k-1個結點存儲空間。依據二叉樹的性質,完全二叉樹和滿二叉樹採用順序存儲比較合適,樹中結點的序號可以唯一地反映出結點之間的邏輯關系,這樣既能夠最大可能地節省存儲空間,又可以利用數組元素的下標值確定結點在二叉樹中的位置,以及結點之間的關系。圖5-5(a)是一棵完全二叉樹,圖5-5(b)給出的圖5-5(a)所示的完全二叉樹的順序存儲結構。
(a) 一棵完全二叉樹 (b) 順序存儲結構
圖5-5 完全二叉樹的順序存儲示意圖
對於一般的二叉樹,如果仍按從上至下和從左到右的順序將樹中的結點順序存儲在一維數組中,則數組元素下標之間的關系不能夠反映二叉樹中結點之間的邏輯關系,只有增添一些並不存在的空結點,使之成為一棵完全二叉樹的形式,然後再用一維數組順序存儲。如圖5-6給出了一棵一般二叉樹改造後的完全二叉樹形態和其順序存儲狀態示意圖。顯然,這種存儲對於需增加許多空結點才能將一棵二叉樹改造成為一棵完全二叉樹的存儲時,會造成空間的大量浪費,不宜用順序存儲結構。最壞的情況是右單支樹,如圖5-7 所示,一棵深度為k的右單支樹,只有k個結點,卻需分配2k-1個存儲單元。
(a) 一棵二叉樹 (b) 改造後的完全二叉樹
(c) 改造後完全二叉樹順序存儲狀態
圖5-6 一般二叉樹及其順序存儲示意圖
(a) 一棵右單支二叉樹 (b) 改造後的右單支樹對應的完全二叉樹
(c) 單支樹改造後完全二叉樹的順序存儲狀態
圖5-7 右單支二叉樹及其順序存儲示意圖
結構5-1二叉樹的順序存儲
#define Maxsize 100 //假設一維數組最多存放100個元素
typedef char Datatype; //假設二叉樹元素的數據類型為字元
typedef struct
{ Datatype bt[Maxsize];
int btnum;
}Btseq;
2.鏈式存儲結構
二叉樹的鏈式存儲結構是指,用鏈表來表示一棵二叉樹,即用鏈來指示元素的邏輯關系。
通常的方法是鏈表中每個結點由三個域組成,數據域和左右指針域,左右指針分別用來給出該結點左孩子和右孩子所在的鏈結點的存儲地址。其結點結構為:
其中,data域存放某結點的數據信息;lchild與rchild分別存放指向左孩子和右孩子的指針,當左孩子或右孩子不存在時,相應指針域值為空(用符號∧或NULL表示)。利用這樣的結點結構表示的二叉樹的鏈式存儲結構被稱為二叉鏈表,如圖5-8所示。
(a) 一棵二叉樹 (b) 二叉鏈表存儲結構
圖5-8 二叉樹的二叉鏈表表示示意圖
為了方便訪問某結點的雙親,還可以給鏈表結點增加一個雙親欄位parent,用來指向其雙親結點。每個結點由四個域組成,其結點結構為:
這種存儲結構既便於查找孩子結點,又便於查找雙親結點;但是,相對於二叉鏈表存儲結構而言,它增加了空間開銷。利用這樣的結點結構表示的二叉樹的鏈式存儲結構被稱為三叉鏈表。
圖5-9給出了圖5-8 (a)所示的一棵二叉樹的三叉鏈表表示。
圖5-9二叉樹的三叉鏈表表示示意圖
盡管在二叉鏈表中無法由結點直接找到其雙親,但由於二叉鏈表結構靈活,操作方便,對於一般情況的二叉樹,甚至比順序存儲結構還節省空間。因此,二叉鏈表是最常用的二叉樹存儲方式。
結構5-2二叉樹的鏈式存儲
#define datatype char //定義二叉樹元素的數據類型為字元
typedef struct node //定義結點由數據域,左右指針組成
{ Datatype data;
struct node *lchild,*rchild;
}Bitree;
9. 樹什麼結構
您要問的是樹是什麼字形結構嗎?
樹是左中右結構,樹是具有木質樹干及樹枝的植物,可存活很多年。一般將喬木稱為樹,主幹,植株,分枝距離地面較高,可以形成樹冠,樹有很多種品類。
文言版《說文解字》中說道:樹,生植之緫名。從木,尌聲。籀文樹字。白話版《說文解字》中則說道:樹,播種、培育、種植等農事的總稱。字形採用「木」作邊旁,採用「尌」作聲旁。這個就是籀文寫法中所說的「樹」字。