⑴ 二叉樹順序存儲
順序存儲的話,就是存儲在數組中,數組的下標就是二叉樹的結點位置(層次結構),比如結點A,在數組中就是位置0,B就是1,C就是2....,以此類推,所以第i個結點的在數組中的位置就是i(i從0開始),i的兩個孩子結點在數組中的位置是2i+1和2i+2
⑵ 二叉樹_順序存儲
滿二叉樹 (Full Binary Tree)
所有分支結點都有存在左子樹和右子樹,並且所有葉子結點都在同一層上。
完全二叉樹 (Complete Binary Tree)
如果一棵具有n個結點的二叉樹與滿二叉樹的前n個結點的結構相同,則稱這棵二叉樹為完全二叉樹。
重要性質 :
對於一棵有n個結點的 完全二叉樹 的結點按照從上至下和從左至右的順序對所有結點從零開始到 n-1 進行順序編號,則對於序號為i的結點(0≤i≤n),有:
(1)如果 i=0,則結點i是二叉樹的根;如果i>0,則其 雙親 是結點 (i-1)/2 (整除)。
(2)如果2i+1≥n,則結點i無左孩子;否則,其 左孩子 是結點 2i+1 。
(3)如果2i+2≥n,則結點i無右孩子;否則,其 右孩子 是結點 2i+2 。
根據上面兩點,得到二叉樹順序存儲的實現:
定義:
獲取雙親節點下標:
左子節點下標:
右子節點下標:
主函數測試:
總結:
1、對於完全二叉樹或接近於完全的二叉樹,用順序存儲可以省空間簡化操作;否則,都不適宜用順序存儲。
2、順序存儲結構通病:必須預先給出數組的存儲空間大小MaxSize。
⑶ 二叉樹的數據存放順序
如果你是按順序存儲的話··那麼直接根據後序排列的左右根判別···
主要要注意每一棵小子樹都要採用這樣的判別··是遞歸的··就本題後序遍歷的話··應該是左H 然後右為空 再D 這樣到了以B為結點的子樹在用一次左右根···即先E在B···以此類推為HDEBFGCA
⑷ 二叉樹相關定義以及如何進行順序存儲
二叉樹(Binary tree)是樹形結構的一個重要類型。許多實際問題抽象出來的數據結構往往是二叉樹形式,即使是一般的樹也能簡單地轉換為二叉樹,而且二叉樹的存儲結構及其演算法都較為簡單,因此二叉樹顯得特別重要。二叉樹特點是每個結點最多隻能有兩棵子樹,且有左右之分。
二叉樹是n個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成,是有序樹。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也稱作一個結點 。(來自網路)
二叉樹的遍歷指的是從根節點出發,按照某種次序依次訪問二叉樹中所有的結點,使得每個結點被訪問一次且僅僅訪問一次。
總結:前序遍歷,中序遍歷,後序遍歷可以按照父節點父節點遍歷的順序來劃分,前序就是 父節點->左子樹->右子樹,中序是 左子樹->父節點->右子樹,後序是 左子樹 -> 右子樹 ->父節點。
⑸ 二叉樹 兩種存儲結構的優缺點
順序存儲可能會浪費空間,但是讀取某個指定的節點的時候效率比較高,鏈式存儲相對二叉樹比較大的時候浪費空間較少,但是讀取某個指定節點的時候效率偏低O(nlogn)。
在數據的順序存儲中,由於每個元素的存儲位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在數據的鏈接存儲中,由於每個元素的存儲位置保存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按指針訪問到。
(5)一般二叉樹的順序存儲擴展閱讀:
分類:
順序存儲方法它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。
鏈接存儲方法它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。
⑹ 什麼是二叉樹的順序存儲
二叉樹的順序存儲是將二叉樹的所有結點,按照一定的次序,存儲到一片連續的存儲單元中
二叉樹的順序存儲必須將結點排成一個適當的線性序列,使得結點在這個序列中的相應位置能反映出結點之間的邏輯關系。這種結構特別適用於近似滿二叉樹。
在一棵具有n個結點的近似滿二叉樹中,當從樹根起,自上層到下層,逐層從左到右給所有結點編號時,就能得到一個足以反映整個二叉樹結構的線性序列。其中每個結點的編號就作為結點。
(6)一般二叉樹的順序存儲擴展閱讀:
二叉樹的性質:
1、二叉樹第i層上的結點數目最多為2{i-1}(i≥1)。
2、深度為k的二叉樹至多有2{k}-1個結點(k≥1)。
3、包含n個結點的二叉樹的高度至少為log2(n+1)。
4、在任意一棵二叉樹中,若終端結點的個數為n0,度為2的結點數為n2,則n0=n2+1。
參考資料來源:網路-二叉樹
⑺ 順序存儲是二叉樹常用的存儲結構嗎
二叉樹的存儲結構
二叉樹是非線性結構,即每個數據結點至多隻有一個前驅,但可以有多個後繼。它可採用順序存儲結構和鏈式存儲結構。
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;
⑻ 二叉樹的順序存儲結構數據A B C D E
二叉樹結構鏈式圖:
A
/
\
B
C
/
\
D
E
前序遍歷:(根,左,右):
A
->
B -> D -> E -> C中序遍歷:(左,根,右):
D -> B -> E -> A -> C後序遍歷:(左,右,根):
D -> E -> B -> C -> A
前序
中序
後序
遍歷,主要是以根節點做為參考點,進行遍歷。(根,左,右)
遍歷順序中
『根』
在第一個,所以叫前序遍歷。(左,根,右) 遍歷順序中
『根』
在第二個,所以叫中序遍歷。(左,右,根) 遍歷順序中
『根』
在第三個,所以叫後序遍歷。
⑼ 二叉樹的存儲方式有哪些
二叉樹的存儲方式通常有動態存儲。用結構體表示二叉樹的一個節點。用數據域保持保存節點的值,用鏈接語保存兩個孩子的指針。還有就是採用滿二叉樹的順序存儲方式。
⑽ 二叉樹的存儲方式
二叉樹的存儲方式分為兩種,一個是順序存儲,一個是鏈表存儲
順序存儲:數組方式存儲,表現上是一個一維數組,邏輯上是一顆二叉樹
鏈表存儲:採用鏈表的方式進行存儲,鏈表包含邏輯關系,左指針,右指針。從表現到邏輯都是一顆二叉樹。