二叉查詢樹(binary search tree),也稱有序二叉樹(ordered binary tree),排序二叉樹(sorted binary tree),是指一棵空樹或者具有下列性質的二叉樹:
若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
任意節點的左、右子樹也分別為二叉查詢樹。
沒有鍵值相等的節點(no duplicate nodes)。
二叉查詢樹的性質:
二叉查詢樹本質上是一種二叉樹,所以上章講的二叉樹的性質他都有。
二叉查詢樹的思想:
二叉排序樹的查詢過程和次優二叉樹類似,通常採取二叉鍊錶作為二叉排序樹的儲存結構。中序遍歷二叉排序樹可得到乙個關鍵字的有序序列,乙個無序序列可以通過構造一棵二叉排序樹變成乙個有序序列,構造樹的過程即為對無序序列進行排序的過程。每次插入的新的結點都是二叉排序樹上新的葉子結點,在進行插入操作時,不必移動其它結點,只需改動某個結點的指標,由空變為非空即可。搜尋,插入,刪除的複雜度等於樹高,o(log(n)).
二叉查詢樹的操作:
/*二叉樹的鏈式定義*/
1//建立二元查詢樹,相當於乙個個的插入#define datatype int2//
二叉樹的前序遍歷
3 typedef struct bitnode //
二元查詢樹的節點
4bitnode;
1//二分查詢樹的搜尋,時間複雜度o(logn)void addbstreenode(bitnode *&pcurrent,datatype value)211
else
1217
else
if(pcurrent->m_value
1821
else
2225
}26 }
1 bitnode * searchbstreenode(bitnode *pcurrent,datatype value)27//返回二叉查詢樹中的最小值if(pcurrent->m_value >value)811
else
1215 }
1 bitnode * getminvaluefrombstree(bitnode *pcurrent)//返回二叉查詢樹中的最大值2
1 bitnode * getmaxvaluefrombstree(bitnode *pcurrent)//返回二叉查詢樹中的乙個節點的後繼結點2
1 bitnode * getsuccessornode(bitnode *pcurrent,bitnode *x)219//返回二叉查詢樹中的乙個節點的前驅結點return
pcurrent;
20 }
1 bitnode * getpredecessornode(bitnode *pcurrent,bitnode *x)219//返回乙個結點的雙親結點return
pcurrent;
20 }
1 bitnode * getparentsnode(bitnode *pcurrent,bitnode *x)214//刪除二叉查詢樹中乙個值為指定值的結點---這個有點長,主要是有些重複的操作可以封裝到函式中去,我沒有!return
null;
15 }
1//以下是對二叉查詢樹的操作例項void deletenodefrombstreenode(bitnode *&pcurrent,datatype value)217
else
1821}22
else
//沒有父結點,那要刪除的就是根節點
2326}27
else
if(!fitnode->m_pright) //
如果右結點為空
2835
else
3639}40
else
//沒有父結點,那要刪除的就是根節點
4144}45
else
//左右孩子都不為空
4657
else
5861 temp->m_pright = fitnode->m_pright;
62 temp->m_pleft = fitnode->m_pleft;
63if
(parents)
6469
else
7073}74
else
7578}79
else
8088
else
8993}94
else
9598}99
}100 }
1intmain()
2
資料結構之二分查詢
二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其 缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成...
資料結構之二分查詢
上面我們介紹了順序查詢,但是它的時間複雜度為o n 讓人很受傷啊,所以有了二分查詢,二分查詢是乙個時間複雜度為o logn 的演算法,當然都是說的一般情況下,二分 二分,看名字就知道它的核心是什麼了,就是不斷地額逼近查詢值。include define max len 20 typedef stru...
資料結構之二分查詢
二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其 缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成...