今天分享一些關於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...