在 JavaScript 二叉搜尋樹中搜索值


我們將利用 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;
}

在此函式中,我們從 root 作為 currNode 開始,並將我們的資料與 currNode 的資料進行比較。如果找到匹配項,則返回 true,否則我們將根據 data 與 currNode 的 data 的關係繼續在 left 或 right 中迭代,直到我們到達葉節點或找到了我們的元素。

你可以使用 - 對其進行測試

示例

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

類似於 insert 函式,搜尋也可以以遞迴方式實現。 

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

更新於: 15-6 月-2020

428 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告