當前位置:首頁 » 服務存儲 » 二叉樹的順序存儲結構如下圖
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

二叉樹的順序存儲結構如下圖

發布時間: 2022-07-24 10:02:42

A. 什麼是二叉樹的順序存儲

二叉樹的順序存儲是將二叉樹的所有結點,按照一定的次序,存儲到一片連續的存儲單元中

二叉樹的順序存儲必須將結點排成一個適當的線性序列,使得結點在這個序列中的相應位置能反映出結點之間的邏輯關系。這種結構特別適用於近似滿二叉樹。

在一棵具有n個結點的近似滿二叉樹中,當從樹根起,自上層到下層,逐層從左到右給所有結點編號時,就能得到一個足以反映整個二叉樹結構的線性序列。其中每個結點的編號就作為結點。

(1)二叉樹的順序存儲結構如下圖擴展閱讀:

二叉樹的性質:

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。

參考資料來源:網路-二叉樹

B. 二叉樹的存儲結構是怎樣的有哪些類型的存儲結構對應的c語言描述是

樓上回答的是樹的存儲,不是二叉樹的存儲,主要如下:
1、順序存儲:適用於完全二叉樹,如果根從1開始編號,則第i結點的左孩子編號為2i,右孩子為2i+1,雙親編號為(i/2)下取整,空間緊密
2、二叉鏈表:適用於普通二叉樹,每個結點除了數據外,還有分別指向左右孩子結點的指針,存儲n個結點有n+1個空指針域,存儲密度小於順序存儲,但是適用范圍廣,缺陷是正常遍歷只能從雙親向孩子,退回來一般需要藉助棧(或者用遞歸,其實也是棧)
3、三叉鏈表:同樣適用於普通二叉樹,結點除了數據外,還有左右孩子與雙親的指針,存儲密度低於二叉鏈表,但是可以非常方便地在二叉樹中遍歷,不需要其他輔助工具

C. 1、二叉樹採用順序存儲結構進行存儲,如圖所示

答案如下:

D. 二叉樹的順序存儲結構數據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
前序
中序
後序
遍歷,主要是以根節點做為參考點,進行遍歷。(根,左,右)
遍歷順序中
『根』
在第一個,所以叫前序遍歷。(左,根,右) 遍歷順序中
『根』
在第二個,所以叫中序遍歷。(左,右,根) 遍歷順序中
『根』
在第三個,所以叫後序遍歷。

E. 設二叉樹bt存儲結構如下

字元a是根結點,a的左分支是b,而a沒有右分支.

二叉樹示意圖:

a
/
b
/
cd
//
efg
//
hi
/
j

二叉樹的(鏈式)邏輯結構示意圖:

#a^
/
#b#
/
#c^#d#
//
^e^#f^#g^
//
^h^#i^
/
^j^

上述示意圖,符號#表示指針域,符號^表示NULL(空指針)

先序遍歷序列:abcedfhgij
中序遍歷序列:ecbhfdjiga
後序遍歷序列:echfjigdba


//C語言測試程序

#include"stdio.h"
#include"stdlib.h"
structtree
{
chardata;
structtree*left;
structtree*right;
};
typedefstructtreetreenode;
typedeftreenode*btree;

btreecreatebtree(char*data,intpos,intmaxPos)//遞歸創建法
{
btreenewnode;

if(data[pos]==0||pos>maxPos)
{
returnNULL;
}
else
{
newnode=(btree)malloc(sizeof(treenode));
newnode->data=data[pos];
newnode->left=createbtree(data,2*pos,maxPos);
newnode->right=createbtree(data,2*pos+1,maxPos);
returnnewnode;
}
}

voidpreorder(btreeptr)//先序遍歷(遞歸法)
{
if(ptr!=NULL)
{
printf("%C",ptr->data);
preorder(ptr->left);
preorder(ptr->right);
}
}

voidinorder(btreeptr)//中序遍歷(遞歸法)
{
if(ptr!=NULL)
{
inorder(ptr->left);
printf("%C",ptr->data);
inorder(ptr->right);
}
}

voidpostorder(btreeptr)//後序遍歷(遞歸法)
{
if(ptr!=NULL)
{
postorder(ptr->left);
postorder(ptr->right);
printf("%C",ptr->data);
}
}

intmain()
{
btreeroot=NULL;
inti;

chardata[64]={0,'a','b',0,'c','d',0,0,
'e',0,'f','g',0,0,0,0,
0,0,0,0,'h',0,'i',0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,'j',0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0};
root=createbtree(data,1,63);
printf("二叉樹的順序存儲內容:");
for(i=1;i<64;i++)
{
if(data[i]==0)
{
printf("^");
}
else
{
printf("%c",data[i]);
}
}

printf(" 二叉樹的先序遍歷序列:");
preorder(root);
printf(" 二叉樹的中序遍歷序列:");
inorder(root);
printf(" 二叉樹的後序遍歷序列:");
postorder(root);

printf(" ");
return0;
}

F. 一個二叉樹按順序方式存儲在一個一維數組中,如圖:

二叉樹按照層序遍歷,依次編號,按照編號的順序,存儲在連續存儲單元的方式就是二叉樹的順序存儲。


G. 二叉樹的結構及畫法

二叉樹的結構有順序存儲和鏈式存儲兩種存儲結構,其中順序存儲是通過數組實現的,從上到下,從左到右的順序依次存放根、左孩子、右孩子;鏈式存儲是通過指針實現的,一個結點有三個域:左指針、數據域、右指針。

H. 有一個二叉樹按順序存儲結構存放在一維數組中,如下圖所示


根節點編號1
第二層有2個節點
編號2
3
第三層4個節點
編號4~7
第四層8個節點
編號8~15
第五層6個
8
9
10有2個孩子