資料結構樹之二分查詢樹

2021-06-21 09:41:17 字數 2748 閱讀 4032

二叉查詢樹(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

void addbstreenode(bitnode *&pcurrent,datatype value)211

else

1217

else

if(pcurrent->m_value

1821

else

2225

}26 }

//二分查詢樹的搜尋,時間複雜度o(logn)

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 }

//以下是對二叉查詢樹的操作例項

1

intmain()

2

資料結構之二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其 缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成...

資料結構之二分查詢

上面我們介紹了順序查詢,但是它的時間複雜度為o n 讓人很受傷啊,所以有了二分查詢,二分查詢是乙個時間複雜度為o logn 的演算法,當然都是說的一般情況下,二分 二分,看名字就知道它的核心是什麼了,就是不斷地額逼近查詢值。include define max len 20 typedef stru...

資料結構之二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其 缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成...