logo

Iskanje v binarnem iskalnem drevesu (BST)

Glede na a BST , naloga je iskanje vozlišča v tem BST .

Za iskanje vrednosti v BST jo obravnavajte kot razvrščeno matriko. Zdaj lahko preprosto izvedemo operacijo iskanja v BST z uporabo Algoritem binarnega iskanja .



Algoritem za iskanje ključa v danem binarnem iskalnem drevesu:

Recimo, da želimo poiskati številko X, Začnemo pri korenu. Nato:

  • Iskano vrednost primerjamo z vrednostjo korena.
    • Če je enako, smo končali z iskanjem, če je manjše, vemo, da moramo iti na levo poddrevo, ker so v binarnem iskalnem drevesu vsi elementi v levem poddrevesu manjši, vsi elementi v desnem poddrevesu pa večji.
  • Ponavljajte zgornji korak, dokler prečkanje ni več mogoče
  • Če je pri kateri koli ponovitvi ključ najden, vrni True. Sicer False.

Ilustracija iskanja v BST:

Za boljše razumevanje si oglejte spodnjo sliko:

bst1



bst2

bst3

bst4



Priporočena praksa Poiščite vozlišče v BST Poskusite!

Program za izvajanje iskanja v BST:

C++




// C++ function to search a given key in a given BST> #include> using> namespace> std;> struct> node {> >int> key;> >struct> node *left, *right;> };> // A utility function to create a new BST node> struct> node* newNode(>int> item)> {> >struct> node* temp> >=>new> struct> node;> >temp->ključ = predmet;> >temp->levo = temp->desno = NULL;> >return> temp;> }> // A utility function to insert> // a new node with given key in BST> struct> node* insert(>struct> node* node,>int> key)> {> >// If the tree is empty, return a new node> >if> (node == NULL)> >return> newNode(key);> >// Otherwise, recur down the tree> >if> (key key)> >node->levo = vstavi (vozlišče->levo, tipka);> >else> if> (key>vozlišče->ključ)> >node->desno = vstavi (vozlišče->desno, ključ);> >// Return the (unchanged) node pointer> >return> node;> }> // Utility function to search a key in a BST> struct> node* search(>struct> node* root,>int> key)> > >// Base Cases: root is null or key is present at root> >if> (root == NULL> // Driver Code> int> main()> {> >struct> node* root = NULL;> >root = insert(root, 50);> >insert(root, 30);> >insert(root, 20);> >insert(root, 40);> >insert(root, 70);> >insert(root, 60);> >insert(root, 80);> >// Key to be found> >int> key = 6;> >// Searching in a BST> >if> (search(root, key) == NULL)> >cout << key <<>' not found'> << endl;> >else> >cout << key <<>' found'> << endl;> >key = 60;> >// Searching in a BST> >if> (search(root, key) == NULL)> >cout << key <<>' not found'> << endl;> >else> >cout << key <<>' found'> << endl;> >return> 0;> }>

>

>

C

enakost objektov v Javi




// C function to search a given key in a given BST> #include> #include> struct> node {> >int> key;> >struct> node *left, *right;> };> // A utility function to create a new BST node> struct> node* newNode(>int> item)> {> >struct> node* temp> >= (>struct> node*)>malloc>(>sizeof>(>struct> node));> >temp->ključ = predmet;> >temp->levo = temp->desno = NULL;> >return> temp;> }> // A utility function to insert> // a new node with given key in BST> struct> node* insert(>struct> node* node,>int> key)> {> >// If the tree is empty, return a new node> >if> (node == NULL)> >return> newNode(key);> >// Otherwise, recur down the tree> >if> (key key)> >node->levo = vstavi (vozlišče->levo, tipka);> >else> if> (key>vozlišče->ključ)> >node->desno = vstavi (vozlišče->desno, ključ);> >// Return the (unchanged) node pointer> >return> node;> }> // Utility function to search a key in a BST> struct> node* search(>struct> node* root,>int> key)> > // Driver Code> int> main()> {> >struct> node* root = NULL;> >root = insert(root, 50);> >insert(root, 30);> >insert(root, 20);> >insert(root, 40);> >insert(root, 70);> >insert(root, 60);> >insert(root, 80);> >// Key to be found> >int> key = 6;> >// Searching in a BST> >if> (search(root, key) == NULL)> >printf>(>'%d not found '>, key);> >else> >printf>(>'%d found '>, key);> >key = 60;> >// Searching in a BST> >if> (search(root, key) == NULL)> >printf>(>'%d not found '>, key);> >else> >printf>(>'%d found '>, key);> >return> 0;> }>

>

>

Java




// Java program to search a given key in a given BST> class> Node {> >int> key;> >Node left, right;> >public> Node(>int> item) {> >key = item;> >left = right =>null>;> >}> }> class> BinarySearchTree {> >Node root;> >// Constructor> >BinarySearchTree() {> >root =>null>;> >}> >// A utility function to insert> >// a new node with given key in BST> >Node insert(Node node,>int> key) {> >// If the tree is empty, return a new node> >if> (node ==>null>) {> >node =>new> Node(key);> >return> node;> >}> >// Otherwise, recur down the tree> >if> (key node.left = insert(node.left, key); else if (key>vozlišče.ključ) vozlišče.desno = vstavi(vozlišče.desno, ključ); // Vrni (nespremenjen) kazalec vozlišča return node; } // Pomožna funkcija za iskanje ključa v iskanju vozlišča BST (koren vozlišča, int ključ) // Koda gonilnika public static void main(String[] args) { BinarySearchTree tree = new BinarySearchTree(); // Vstavljanje vozlišč tree.root = tree.insert(tree.root, 50); drevo.vstavi(drevo.koren, 30); drevo.vstavi(drevo.koren, 20); drevo.vstavi(drevo.koren, 40); drevo.vstavi(drevo.koren, 70); drevo.vstavi(drevo.koren, 60); drevo.vstavi(drevo.koren, 80); // Ključ, ki ga je treba najti int key = 6; // Iskanje v BST if (tree.search(tree.root, key) == null) System.out.println(key + ' not found'); else System.out.println(ključ + ' najden '); ključ = 60; // Iskanje v BST if (tree.search(tree.root, key) == null) System.out.println(key + ' not found'); else System.out.println(ključ + ' najden '); } }>

>

>

java string format long

Python3




# Python3 function to search a given key in a given BST> class> Node:> ># Constructor to create a new node> >def> __init__(>self>, key):> >self>.key>=> key> >self>.left>=> None> >self>.right>=> None> # A utility function to insert> # a new node with the given key in BST> def> insert(node, key):> ># If the tree is empty, return a new node> >if> node>is> None>:> >return> Node(key)> ># Otherwise, recur down the tree> >if> key node.left = insert(node.left, key) elif key>node.key: node.right = insert(node.right, key) # Vrne (nespremenjen) kazalec vozlišča return node # Pomožna funkcija za iskanje ključa v BST def search(root, key): # Osnovni primeri: root je null ali ključ je prisoten v korenu, če je root None ali root.key == ključ: vrni koren # Ključ je večji od korenskega ključa, če root.key vrne iskanje (root.right, ključ) # Ključ je manjši od korena 's key return search(root.left, key) # Driver Code if __name__ == '__main__': root = None root = insert(root, 50) insert(root, 30) insert(root, 20) insert (root, 40) insert(root, 70) insert(root, 60) insert(root, 80) # Ključ, ki ga je treba najti ključ = 6 # Iskanje v BST, če je search(root, key) None: print(key, 'not found') else: print(key, 'found') key = 60 # Iskanje v BST, če je search(root, key) None: print(key, 'not found') else: print(ključ, 'najdeno')>

>

>

C#




// C# function to search a given key in a given BST> using> System;> public> class> Node {> >public> int> key;> >public> Node left, right;> }> public> class> BinaryTree {> >// A utility function to create a new BST node> >public> Node NewNode(>int> item)> >{> >Node temp =>new> Node();> >temp.key = item;> >temp.left = temp.right =>null>;> >return> temp;> >}> >// A utility function to insert> >// a new node with given key in BST> >public> Node Insert(Node node,>int> key)> >{> >// If the tree is empty, return a new node> >if> (node ==>null>)> >return> NewNode(key);> >// Otherwise, recur down the tree> >if> (key node.left = Insert(node.left, key); else if (key>vozlišče.ključ) vozlišče.desno = Vstavi(vozlišče.desno, ključ); // Vrni (nespremenjen) kazalec vozlišča return node; } // Pomožna funkcija za iskanje ključa v javnem iskanju vozlišča BST (koren vozlišča, int ključ) // Osnovni primeri: koren je nič ali je ključ prisoten v korenu, če (root == nič // Koda gonilnika javna statična praznina Glavni () {BinaryTree bt = new BinaryTree(); root(root, 50); bt.Insert(root, 20); bt.Insert(root, 20); , 40); bt.Insert (root, 80); // Ključ, ki ga je treba najti v BST ( bt.Search(root, key) == null) Console.WriteLine(key + ' not found'); else Console.WriteLine(key + ' found'); // Iskanje v BST if (bt.Search(root, key) == null) Console.WriteLine(key + ' not found'); else Console.WriteLine(key + ' found'); } }>

>

>

Javascript




vlc prenesite youtube

// Javascript function to search a given key in a given BST> class Node {> >constructor(key) {> >this>.key = key;> >this>.left =>null>;> >this>.right =>null>;> >}> }> // A utility function to insert> // a new node with given key in BST> function> insert(node, key) {> >// If the tree is empty, return a new node> >if> (node ===>null>) {> >return> new> Node(key);> >}> >// Otherwise, recur down the tree> >if> (key node.left = insert(node.left, key); } else if (key>vozlišče.ključ) { vozlišče.desno = vstavi(vozlišče.desno, ključ); } // Vrni (nespremenjen) kazalec vozlišča return node; } // Pomožna funkcija za iskanje ključa v funkciji BST search(root, key) { // Osnovni primeri: root je nič ali je ključ prisoten v root if (root === null || root.key === key ) { vrni koren; } // Ključ je večji od korenskega ključa, če (root.key vrne iskanje (root.right, ključ); } // Ključ je manjši od korenskega ključa vrne iskanje (root.left, ključ); } // Koda gonilnika = null; vstavi (koren, 30); vstavi (koren, 70); 60); // Ključ, ki ga je treba najti, pusti ključ = 6; // Iskanje v BST if (search(root, key) === null) { console.log(key + ' not found'); else { console.log(key + ' found'); // Iskanje v BST if (search(root, key) === null) { console.log( ključ + ' ni najden '); else { console.log(ključ + ' najden');

> 

6 not found 60 found>

Časovna zahtevnost: O(h), kjer je h višina BST.
Pomožni prostor: O(h), kjer je h višina BST. To je zato, ker bi bila največja količina prostora, potrebnega za shranjevanje rekurzijskega sklada h .

Sorodne povezave: