專案 1 驗證演算法之二叉排序樹

2021-07-25 09:47:04 字數 2398 閱讀 4478

/* 

*all right reserved.  

*檔名稱:test.cpp  

*完成日期:2023年12月15日  

*版本號:v1.7.1

*  *  問題描述:驗證二叉排序樹。

*  程式輸入:無。

*  程式輸出:刪除結果。  */

tree.cpp:

#include #include typedef int keytype;

typedef char infotype[10];

typedef struct node //記錄型別

bstnode;

//在p所指向的二叉排序樹中,插入值為k的節點

int insertbst(bstnode *&p,keytype k)

else if (k==p->key) //樹中存在相同關鍵字的結點,返回0

return 0;

else if (kkey)

return insertbst(p->lchild,k); //插入到*p的左子樹中

else

return insertbst(p->rchild,k); //插入到*p的右子樹中

}//由有n個元素的陣列a,建立乙個二叉排序樹

bstnode *createbst(keytype a,int n) //返回bst樹根結點指標

}}//在bt指向的節點為根的排序二叉樹中,查詢值為k的節點。找不到返回null

bstnode *searchbst(bstnode *bt,keytype k)

//二叉排序樹中查詢的非遞迴演算法

bstnode *searchbst1(bstnode *bt,keytype k)

return null;

}void delete1(bstnode *p,bstnode *&r) //當被刪*p結點有左右子樹時的刪除過程

}void delete(bstnode *&p) //從二叉排序樹中刪除*p結點

else if (p->lchild==null) //*p結點沒有左子樹的情況

else delete1(p,p->lchild); //*p結點既沒有左子樹又沒有右子樹的情況

}int deletebst(bstnode *&bt, keytype k) //在bt中刪除關鍵字為k的結點

}}int main()

; bt=createbst(a,n);

printf("bst:");

dispbst(bt);

printf("\n");

printf("刪除%d結點\n",x);

總結: 定義

二叉排序樹或者是一棵空樹,或者是具有下列性質的

二叉樹:

(1)若左子樹不空,則左子樹上所有結點的值均小於它的

根結點的值;

(2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;

(3)左、右子樹也分別為二叉排序樹;編輯

步驟:

二叉樹 若根結點的

關鍵字值等於查詢的關鍵字,

成功。否則,若小於根結點的關鍵字值,

遞迴查左子樹。

若大於根結點的關鍵字值,遞迴查右子樹。

若子樹為空,查詢不成功。

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

在一般情況下,設 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 個結點二叉分類樹的平均查詢長度。

p(3) = (1+2+2)/ 3 = 5/3

p(2) = (1+2)/ 2 = 3/2∴ p(n,i)= [ 1+ ( p(i) + 1) * i + ( p(n-i-1) + 1) * (n-i-1) ] / n

∴ p(n)=

p(n,i)/ n <= 2(1+i/n)lnn

因為 2(1+i/n)lnn≈1.38logn 故p(n)=o(logn)

第十四周專案1 驗證演算法之二叉排序樹

問題及 檔名稱 cube007.cpp 作 者 劉小楠 完成日期 2016年12月2日 輸入描述 無 輸出描述 結果 include include typedef int keytype typedef char infotype 10 typedef struct node 記錄型別 bstno...

第十四周專案1 驗證演算法之二叉排序樹

問題 檔名稱 ll.cpp 作 者 李玲 完成日期 2016年12月2日 輸入描述 無 輸出描述 結果 include include typedef int keytype typedef char infotype 10 typedef struct node 記錄型別 bstnode 在p所指...

驗證二叉排序樹相關演算法

include include typedef int keytype typedef char infotype 10 typedef struct node 記錄型別 bstnode 在p所指向的二叉排序樹中,插入值為k的節點 int insertbst bstnode p,keytype k ...