查詢二叉樹(BST)

2021-10-03 12:31:09 字數 2620 閱讀 4041

今天分享一些關於bst的內容:

一、基礎知識點

1 一棵樹最上面的節點稱為根節點,如果乙個節點下面連線多個節點,那麼該節點稱為父節點,,,它下面的節點稱為子節點。乙個節點可以有0個 1個 或多個子節點,沒有任何子節點的節點稱為葉子節點

2 以某種特定的順序訪問樹中所有的節點稱為樹的遍歷

3 樹可以分為幾個層次,根節點是第0層,子節點是第1層,子節點的子節點是第2層,依次類推

二、今天的主角兒–bst

什麼是bst?

bst(二叉查詢樹):相對較小的值儲存在左節點中,相對較大的值儲存在右節點中 ,—查詢效率高(這一特性)。

什麼樣的樹才符合bst?

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

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

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

(4)沒有鍵值相等的結點。

三、實現一棵查詢二叉樹

採用es6模組化

bst.js用於建立bst類以及一些方法(插入、前序、後序、中序遍歷的方法)

bst.js如下:

import node from

"./node.js"

;export

default

class

bstextends

node

//用於輸出資料

//建立bst類,包括的方法有插入,前序,中序,後續遍歷

insert

(data)

else

}else}}

}}//中序遍歷

inorder

(node)

}//先序遍歷

preorder

(node)

}//後序遍歷

postorder

(node)

}}

node.js主要用於建立節點

export

default

class

node

//show方法用來列印出節點的值

show()

}

呼叫:

html頁面引入即可

測試效果

四、二叉查詢樹的刪除、查詢最大最小值、定值查詢問題

1、獲取最大值和最小值

//不停的遍歷左子樹,直到為null,返回最小值

function

getmin()

return current.data;

}//不停的遍歷右子樹,直到為null返回最大值

function

getmax()

return current.data;

}

2、刪除某乙個子節點

思路:讓待刪除的節點和根節點進行比較,分三種情況:大於(和右子節點繼續比較),小於(就和左子節點繼續比較);等於(需要判斷該節點有沒有子節點,如果有乙個沒有就返回null;如果有乙個節點,就返回該節點;如果有兩個子節點,就查詢待刪除節點左子樹上的最大值或者查詢其右子樹上的最小值。)

getsmallest

(node)

else

}removenode

(node,data)

if(data===node.data)

if(node.left===

null)if

(node.right===

null

)//這裡採用的是查詢右子樹的最小值

var tempnode=

this

.getsmallest

(node.right)

; node.data=tempnode.data;

node.right=

removenode

(node.right,tempnode.data)

;return node;

}else

if(data

else

if(data>node.data)

}var b =

newbst()

; b.

removenode

(b.root,25)

;

3、查詢某個節點

find

(data)

else

if(current.data>data)

else

}//空樹就返回乙個空

二叉樹 四 二叉查詢樹 BST

二叉查詢樹 對於二叉查詢樹的任何乙個節點,設這個節點的值為k,這個節點的左子樹的任意乙個節點的值都小於k,右子樹的任何乙個節點的值都大於等於k。對於任何的二叉查詢樹,使用中序遍歷 左根右 可以將值從小到大列印出來。對於二叉查詢樹的檢索,例如圖a,需要檢索32,那麼首先需要檢索根節點,發現37大於32...

二叉查詢樹 BST

當所有的靜態查詢結構新增和刪除乙個資料的時候,整個結構都需要重建。這對於常常需要在查詢過程中動態改變資料而言,是災難性的。因此人們就必須去尋找高效的動態查詢結構,我們在這討論乙個非常常用的動態查詢樹 二叉查詢樹。二叉查詢樹的特點 下面的圖就是兩棵二叉查詢樹,我們可以總結一下他的特點 1 若它的左子樹...

二叉查詢樹(BST)

二叉查詢樹,也稱為二叉排序樹,二叉搜尋樹。二叉查詢樹結合了鍊錶插入的靈活性和有序陣列查詢 二分查詢 的高效性。用二叉查詢樹實現有序符號表的api。public class bst,value 有序符號表的相關方法 public intsize private intsize node x publi...