首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
23、二叉排序樹(BST, Binary SortTree) 的C++實現
二叉排序樹(Binary Sort Tree)又稱二叉查找(搜索)樹(Binary Search Tree)。
(1)二叉排序樹定義:二叉排序樹或者是空樹,或者是滿足如下性質的二叉樹:
①若它的左子樹非空,則左子樹上所有結點的值均小于根結點的值;
②若它的右子樹非空,則右子樹上所有結點的值均大于根結點的值;
③左、右子樹本身又各是一棵二叉排序樹。
上述性質簡稱二叉排序樹性質(BST性質),故二叉排序樹實際上是滿足BST性質的二叉樹。
(2)二叉排序樹的特點
由BST性質可得:
[1]二叉排序樹中任一結點x,其左(右)子樹中任一結點y(若存在)的關鍵字必小(大)于x的關鍵字。
[2]二叉排序樹中,各結點關鍵字是惟一的。 注意:實際應用中,不能保證被查找的數據集中各元素的關鍵字互不相同,所以可將二叉排序樹定義中BST性質[1]里的"小于"改為"小于等于",或將BST性質[2]里的"大于"改為"大于等于",甚至可同時修改這兩個性質。
[3]按中序遍歷該樹所得到的中序序列是一個遞增有序序列。
(3)在二叉排序樹上進行查找時的平均查找長度和二叉樹的形態有關:
①在最壞情況下,二叉排序樹是通過把一個有序表的n個結點依次插入而生成的,此時所得的二叉排序樹蛻化為棵深度為n的單支樹,它的平均查找長度和單鏈表上的順序查找相同,亦是(n+1)/2。
②在最好情況下,二叉排序樹在生成的過程中,樹的形態比較勻稱,最終得到的是一棵形態與二分查找的判定樹相似的二叉排序樹,此時它的平均查找長度大約是lgn。
③插入、刪除和查找算法的時間復雜度均為O(lgn)。
(4)二叉排序樹和二分查找的比較
就平均時間性能而言,二叉排序樹上的查找和二分查找差不多。
就維護表的有序性而言,二叉排序樹無須移動結點,只需修改指針即可完成插入和刪除操作,且其平均的執行時間均為O(lgn),因此更有效。二分查找所涉及的有序表是一個向量,若有插入和刪除結點的操作,則維護表的有序性所花的代價是O(n)。當有序表是靜態查找表時,宜用向量作為其存儲結構,而采用二分查找實現其查找操作;若有序表里動態查找表,則應選擇二叉排序樹作為其存儲結構。
//二叉查找樹代碼
//BTreeNode.h二叉樹結點抽象類型
#ifndefBTREENODE_H
#defineBTREENODE_H
#include
//template
template
template
{
//friend class BTree
friend class SortBTree
public:
BTreeNode():lchild(NULL),rchild(NULL){ };
BTreeNode(const T&dt,BTreeNode
:data(dt),lchild(lch),rchild(rch){};
T get_data()const {return data; };
BTreeNode
BTreeNode
void set_data(const T& d) { data =d;};
protected:
private:
T data;
BTreeNode
};
#endif
/************************************************************************
*SortBTree.h
* 根據給定的字符串構造一個排序二叉樹
* 從排序二叉樹中尋找最大值,最小值,不存在時拋出invalid_argument異常
* 從排序二叉樹中刪除某一元素,不存在時拋出invalid_argument 異常
* 往排序二叉樹中添加一個新元素
************************************************************************/
相關推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |