Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การค้นหาค่าใน Javascript Binary Search Tree


เราจะใช้คุณสมบัติของ 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