導航:首頁 > 計算方法 > 二叉排序樹長度計算方法

二叉排序樹長度計算方法

發布時間:2023-04-28 06:07:22

A. 二叉排序樹的平均查找長度怎樣計算

要是哪舉粗里看塵檔不懂可以評論!正兄鎮

B. 二叉樹的深度怎麼

  1. 一顆樹只有一個節點,它的深度是1;

  2. 根節點只有左子樹而沒有右子樹,那麼二叉樹的深度應該是其左子樹的深度加1;

  3. 根節點只有右子樹而沒有左子樹,那麼二叉樹的深度應該是其右樹的深度加1;

  4. 根節點既有左子樹又有右子樹,那麼二叉樹的深度應該是其左右子樹的深度較大值加1

C. 二叉樹的深度演算法怎麼算啊

二叉樹的深度演算法:
一、遞歸實現基本思想:
為了求得樹的深度,可以先求左右子樹的深度,取二者較大者加1即是樹的深度,遞歸返回的條件是若節點為空,返回0
演算法:
1
int
FindTreeDeep(BinTree
BT){
2
int
deep=0;
3
if(BT){
4
int
lchilddeep=FindTreeDeep(BT->lchild);
5
int
rchilddeep=FindTreeDeep(BT->rchild);
6
deep=lchilddeep>=rchilddeep?lchilddeep+1:rchilddeep+1;
7
}
8
return
deep;
9
}
二、非遞歸實現基本思想:
受後續遍歷二叉樹思想的啟發,想到可以利用後續遍歷的方法來求二叉樹的深度,在每一次輸出的地方替換成算棧S的大小,遍歷結束後最大的棧S長度即是棧的深度。
演算法的執行步驟如下:
(1)當樹非空時,將指針p指向根節點,p為當前節點指針。
(2)將p壓入棧S中,0壓入棧tag中,並令p執行其左孩子。
(3)重復步驟(2),直到p為空。
(4)如果tag棧中的棧頂元素為1,跳至步驟(6)。從右子樹返回
(5)如果tag棧中的棧頂元素為0,跳至步驟(7)。從左子樹返回
(6)比較treedeep與棧的深度,取較大的賦給treedeep,對棧S和棧tag出棧操作,p指向NULL,並跳至步驟(8)。
(7)將p指向棧S棧頂元素的右孩子,彈出棧tag,並把1壓入棧tag。(另外一種方法,直接修改棧tag棧頂的值為1也可以)
(8)循環(2)~(7),直到棧為空並且p為空
(9)返回treedeep,結束遍歷
1
int
TreeDeep(BinTree
BT
){
2
int
treedeep=0;
3
stack
S;
4
stack
tag;
5
BinTree
p=BT;
6
while(p!=NULL||!isEmpty(S)){
7
while(p!=NULL){
8
push(S,p);
9
push(tag,0);
10
p=p->lchild;
11
}
12
if(Top(tag)==1){
13
deeptree=deeptree>S.length?deeptree:S.length;
14
pop(S);
15
pop(tag);
16
p=NULL;
17
}else{
18
p=Top(S);
19
p=p->rchild;
20
pop(tag);
21
push(tag,1);
22
}
23
}
24
return
deeptree;
25
}

D. 二叉樹路徑長度問題

因為肢雀裂每個節點都只有一個父歲芹節點,所以二叉樹的路徑是唯一的,歷閉那麼計算的時候最簡單的方法就是數「橋」的個數,也就是一個路徑上所有節點個數減1,」橋「指連接兩個相鄰節點的線。

E. 如何用C語言或C++語言實現二叉排序樹的平均查找長度的計算

main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{t=x;x=y;y=t;} /*交換x,y的值*/
if(x>z)
{t=z;z=x;x=t;}/*交換x,z的蔽大困值*/
if(y>z)
{t=y;y=z;z=t;}/*交換z,y的值*/
printf("宏念仿皮small to big: %d %d %d\n",x,y,z);
}

F. 分塊查找平均查找長度計算公式是什麼順序查找和折半

順喊族序查找:O(n)
折半查找:O(log2n)
分塊查找:大致 O(n^0.5)
二叉排序樹:介於O(log2n)和O(n)之間
平衡二叉樹:O(log2n)
m階B-樹:O(logmn)
散列或者音譯哈希平均查找長度與結點鋒蔽個數無關的查找方法,ASL的理論值只與裝填因子銀滲州有關

G. 最差適配的平均查找長度

n個節點的二叉排序樹在最壞的情況下的平均查找長度為(n+1)/2。

二叉排序樹每個嫌芹陪結點的C(i)為該結點的層次數。最壞情況下,當先後插入的關鍵字有序時,構成的二叉排序樹蛻變為單支樹,樹的深度為芹蠢其平均查找長度(n+1)/2(和順序查找相同),最好的情況是二叉排序樹的形態和折半查找的判定樹相同,其平均查找長度和log 2 (n)成正比。

計算方法

最差適應演算法(Worst Fit)為首改適應此演算法,空閑分區表(空閑區鏈)中的空閑分區要按大小從大到小進行排序,自表頭開始查找到第一個滿足要求的自由分區分配。該演算法保留小的空閑區,盡量減少小的碎片產生。

最差適應演算法,也稱最差適配演算法,它從全部空閑區中找出能滿足作業要求的、且大小最大的空閑分區,從而使鏈表中的結點大小趨於均勻,適用於請求分配的內存大小范圍較窄的系統。

H. 二叉搜索樹的平均查找長度及時間復雜度

推導過程如下:

假設有一顆二叉排序樹, 總結點數沒姿是n, 高度是h, 根結點的高度是1,
假設也是滿二叉樹, n與h的關系, 有公式: n = (2^h) - 1
也就是: h = log2(n+1)

對於高度為2,總結點數是3的二叉排序樹(滿二叉樹),查找成功的平均查找長度為:

對於高度為3,總結點數是7的二叉排序樹(滿二叉樹),查找成功的平均查找長度為:

對於高度為h,總結點數是n的二叉排序樹(滿二叉樹),查找成功的平均查找長度為:

對於[等式1]里的1*1 + 2*2 + 3*4 + ... + h*2^(h-1)
該數列有h項: 1*2^0, 2*2^1, 3*2^2, ... , h*2^(h-1)
其總和:

等式兩邊同乘以2,有:

用[等式3]減去[等式2]有:

其中(2^0 + 2^1 + 2^2 + 2^3 + ... + 2^(h-1))是等比數列求和,設:

等式兩邊同乘以2,有: 2*M = (2^1 + 2^2 + 2^3 + ... + 2^h)
兩個等式相減,有: M = 2^h - 1
將M代入[等式4]有:

因為 h = log2(n+1),將h代入[等式5],有:

也就是

將上述S代入[等式1],有:

所以,二叉排序樹查找成功的平均查找長度為:

其時間復雜度是: O(log2(n))

假設有一顆平衡的二叉排序樹,高度h=4,總結點數n=11,不是滿二叉樹:

根據[公式1],查找成功的平均查找長度為:
ASL = [(n+1)/n] * log2(n+1) - 1 = [(11+1)/11] * log2(11+1) - 1 約等於 2.91

逐個伏灶結點計數,平均查找長度為:
ASL = (1*1 + 2*2 + 3*4 + 4*4) / 11 = 33 / 11 = 3

假設有一顆平衡的二叉排序樹,高度h=4,總結點數n=15,是滿二叉樹:

根據[公式1],查找成缺察扮功的平均查找長度為:
ASL = [(n+1)/n] * log2(n+1) - 1 = [(15+1)/15] * log2(15+1) - 1 = 49/15

逐個結點計數,平均查找長度為:
ASL = (1*1 + 2*2 + 3*4 + 4*8) / 15 = 49/15

I. 數據結構中二叉排序樹的平均查找長度

先構造二叉排序樹,然後計算就行了:
(2×3+2×2+2)/7=1.7

J. 二叉排序樹的不成功的平均查找長度怎麼求

查找不成功就是從查找位置開始直到一個位置為空需要比較的次數。

比如:

62

/

30 74

/

15 56

/

48

找到所有的外結點,也就是查找失敗的點,然後計算ASL

就你的BST,結果敗老如下:

15的左右子樹都為空,也就是左右子樹都是外結點,失敗時需要比較62、30、15一共3次

48的左右子樹都為空,也就是左右子樹都是外結點,失敗時需要比較62、30、15、48一共4次

56的右昌枯棚子樹為空,也就是右子樹是外結點,失敗時需要比較62、30、56一共3次

74的左右子樹都為空,也就是左右子樹都是外結點,失敗時需要比較62、74一共2次

因此外結點總數為2 *3 + 1 = 7 (其實這個數量一定是關鍵字個數加1)

所以ASL = (2 * 3 + 2 * 4 + 1 * 3 + 2 * 2) / 7 = 21 / 7 = 3。

(10)二叉排序樹長度計算方法擴展閱讀:

查找步驟:

二叉樹

若根結點的關鍵字值等於查找的關鍵字,成功。否則,若小於根結點的關鍵字值,遞歸查左子樹。若大於根結點的關鍵字值,遞歸查右子樹。若子樹為空,查找不成功。

平均情況分析(在成功查找兩種的情況下):

在一般情況下,設 P(n,i)為它的左子樹的結點個數為 i 時的平均查找長度。如圖的結點個數為 n = 6 且 i = 3; 則 P(n,i)= P(6, 3) = [ 1+ ( P(3) + 1) * 3 + ( P(2) + 1) * 2 ] / 6= [ 1+ ( 5/3 + 1) * 3 + ( 3/2 + 1) * 2 ] / 6

注意:這里 P(3)、P(2) 是具有 3 個結點、2 個結點的二叉分類樹的平均查找長度。 在一般情況,P(i)為具有 i 個結點二叉分類樹的平均查找長度。平均查找長度= 每個結點的深度的總和 / 總結點數

參考耐則資料來源:網路-二叉排序樹

閱讀全文

與二叉排序樹長度計算方法相關的資料

熱點內容
一樓樓頂漏水用什麼方法解決 瀏覽:711
快速切紅辣椒方法 瀏覽:702
格蘭仕微電腦壓力鍋頂蓋拆卸方法 瀏覽:446
豬腳鹵水製作方法視頻 瀏覽:979
養青斑魚的方法和技巧 瀏覽:919
訓練氣質的方法 瀏覽:851
脊柱損傷治療新方法和新葯物 瀏覽:507
串鉤主線與子線無結連接方法 瀏覽:82
取消電腦開機密碼的方法 瀏覽:916
樓地面工程施工方法有哪些 瀏覽:74
銅線安全計算方法 瀏覽:447
家庭地瓜種植方法 瀏覽:785
簡述繼電器工作狀態的檢測方法 瀏覽:377
吉利遠景皮帶異響解決方法 瀏覽:714
銷售品種多用什麼方法計算成本 瀏覽:585
洋蔥的種植技術和方法視頻播放 瀏覽:740
luna使用方法第一次 瀏覽:931
引火歸元的簡單方法 瀏覽:540
蔬菜架子種植方法視頻 瀏覽:509
四季梅養護方法視頻 瀏覽:324