二分查詢和二叉查詢樹

2021-09-29 17:56:56 字數 1380 閱讀 5126

二分查詢要求元素排列有序。首先,假設表中元素是按公升序排列,將陣列中間位置的元素與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將陣列分成前、後兩個子陣列,如果中間位置記錄的元素大於查詢關鍵字,則進一步查詢前一子陣列,否則進一步查詢後一子陣列。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

二分查詢的時間複雜度為o(logn)

遞迴演算法:

//遞迴演算法

public int rank(key key, int lo, int hi)

非遞迴演算法:

//非遞迴演算法

public int rank(key key)

return lo;

}

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

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

二叉查詢樹的時間複雜度為o(logn)

結點類:

private class node

}

其中n為以該節點為根的子樹的節點總數,計算方法如下:

size(x) = size(x.left) + size(x.right) + 1

查詢方法:

遞迴查詢,如果小於當前結點,遞迴去左子樹查詢;如果大於當前結點,遞迴去右子樹查詢。

public value get(key key) 

public value get(node x,key key)

插入方法:

先查詢,如果樹中已經存在相應的鍵,只需更新值;如果查詢無果,指標也已經指向了應該插入的位置,用要插入的鍵值對新創結點並插入到相關位置。

public void put(key key,value val) 

private node put(node x,key key,value val)

刪除方法:

即將被刪除的節點記為t

x指向它的後繼節點min(t.right)

將x的右鏈結鏈結到x的父節點的左鏈結上(即替換掉原x的位置)

用x節點替換t節點(將t.left和t.right設為x.left和x.right)

public void delete(key key) 

private node delete(node x,key key)

x.n = size(x.left)+size(x.right)+1;

return x;

}

查詢演算法 順序查詢 二分查詢 二叉樹查詢 演算法

package lengreen.struct.other import lengreen.struct.strategy import lengreen.struct.impl.binarytreenode import lengreen.struct.impl.integerstrategy i...

查詢 二叉查詢樹

原始碼 目錄 順序查詢 二分查詢 插值查詢 斐波那契查詢 分塊查詢 雜湊查詢 二叉樹查詢 紅黑樹查詢 二叉查詢樹又稱二叉排序樹又稱二叉搜尋樹,如不為空則有以下性質 1.若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2.若任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結...

二叉樹和二叉查詢樹

以前學過二叉樹,是用c語言實現的,當時雖然聽懂了,但是自己用c語言實現,還是有點困難的,現在學習了前端,發現二叉樹還是很簡單的。今天就來說一說。二叉樹是一種常用的資料結構,樹也是一種非線性的資料結構,以分層的方式儲存資料,樹被用來儲存具有層級關係的資料,比如系統中的檔案,還有前端經常說到的dom樹。...