เราจะใช้คุณสมบัติของ BST เพื่อค้นหาองค์ประกอบในนั้น ให้เราดูการใช้งานการค้นหาแบบวนซ้ำก่อน -
ตัวอย่าง
searchIter(data) {
let currNode = this.root;
while (currNode !== null) {
if (currNode.data === data) {
// Found the element!
return true;
} else if (data < currNode.data) {
// Go Left as data is smaller than parent
currNode = currNode.left;
} else {
// Go right as data is greater than parent
currNode = currNode.right;
}
}
return false;
} ในฟังก์ชันนี้ เราเริ่มต้นด้วยรูทเป็น currNode และตรวจสอบข้อมูลของเราเทียบกับข้อมูลของ currNode หากเราพบค่าที่ตรงกัน เราก็คืนค่าเป็น จริง มิฉะนั้น เราจะวนซ้ำไปทางซ้ายหรือขวาต่อไปตามความสัมพันธ์ของข้อมูลกับข้อมูลของ currNode จนกว่าเราจะไปถึงใบไม้หรือพบองค์ประกอบของเรา
คุณสามารถทดสอบสิ่งนี้ได้โดยใช้ -
ตัวอย่าง
let BST = new BinarySearchTree(); BST.insertIter(10); BST.insertIter(15); BST.insertIter(5); BST.insertIter(50); BST.insertIter(3); BST.insertIter(7); BST.insertIter(12); console.log(BST.searchIter(2)); console.log(BST.searchIter(12)); console.log(BST.searchIter(50)); console.log(BST.searchIter(-22)); console.log(BST.searchIter(200));
ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
false true true false false
เช่นเดียวกับฟังก์ชันแทรก การค้นหาสามารถดำเนินการแบบเรียกซ้ำได้เช่นกัน
searchRec(data) {
return searchRecHelper(data, this.root);
} อีกครั้ง เราจะต้องสร้างฟังก์ชันตัวช่วยที่เราไม่ต้องการให้เป็นส่วนหนึ่งของคลาส ดังนั้นเราจะสร้างฟังก์ชันนี้นอกนิยามคลาส -
ตัวอย่าง
function searchRecHelper(data, root) {
if (root === null) {
// Reached leaf but didn't find it.
return false;
}
if (data < root.data) {
return searchRecHelper(data, root.left);
} else if (data > root.data) {
return searchRecHelper(data, root.right);
}
// This means element is found
return true;
} คุณสามารถทดสอบสิ่งนี้ได้โดยใช้ -
ตัวอย่าง
let BST = new BinarySearchTree(); BST.insertRec(10); BST.insertRec(15); BST.insertRec(5); BST.insertRec(50); BST.insertRec(3); BST.insertRec(7); BST.insertRec(12); console.log(BST.searchRec(2)); console.log(BST.searchRec(12)); console.log(BST.searchRec(50)); console.log(BST.searchRec(-22)); console.log(BST.searchRec(200));
ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
false true true false false