logo

Søgning i binært søgetræ (BST)

Givet en BST , opgaven er at søge en node i denne BST .

For at søge efter en værdi i BST skal du betragte den som et sorteret array. Nu kan vi nemt udføre søgeoperation i BST ved hjælp af Binær søgealgoritme .



Algoritme til at søge efter en nøgle i et givet binært søgetræ:

Lad os sige, at vi vil søge efter nummeret X, Vi starter ved roden. Derefter:

  • Vi sammenligner den værdi, der skal søges i, med værdien af ​​roden.
    • Hvis det er ens, er vi færdige med søgningen, hvis den er mindre, ved vi, at vi skal gå til venstre undertræ, fordi i et binært søgetræ er alle elementerne i venstre undertræ mindre, og alle elementerne i det højre undertræ er større.
  • Gentag ovenstående trin, indtil det ikke er muligt at krydse mere
  • Hvis nøglen findes ved en gentagelse, returneres True. Ellers falsk.

Illustration af søgning i en BST:

Se illustrationen nedenfor for en bedre forståelse:

bst1



bst2

bst3

bst4



Anbefalet praksisSøg efter en node i BSTTry It!

Program til at implementere søgning i 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->nøgle = element;> >temp->venstre = temp->højre = 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->venstre = indsæt(node->venstre, tast);> >else> if> (key>node->tast)> >node->højre = indsæt(node->højre, nøgle);> >// 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




// 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->nøgle = element;> >temp->venstre = temp->højre = 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->venstre = indsæt(node->venstre, tast);> >else> if> (key>node->tast)> >node->højre = indsæt(node->højre, nøgle);> >// 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;> }>

>

find min iphone fra Android
>

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>node.key) node.right = insert(node.right, key); // Returner (uændret) node pointer return node; } // Hjælpefunktion til at søge efter en nøgle i en BST Node-søgning(Node root, int key) // Driver Code public static void main(String[] args) { BinarySearchTree tree = new BinarySearchTree(); // Indsættelse af noder tree.root = tree.insert(tree.root, 50); tree.insert(tree.root, 30); træ.indsæt(træ.rod, 20); træ.indsæt(træ.rod, 40); træ.indsæt(træ.rod, 70); træ.indsæt(træ.rod, 60); træ.indsæt(træ.rod, 80); // Nøgle der skal findes int nøgle = 6; // Søger i en BST if (tree.search(tree.root, key) == null) System.out.println(key + ' ikke fundet'); else System.out.println(tast + ' fundet'); nøgle = 60; // Søger i en BST if (tree.search(tree.root, key) == null) System.out.println(key + ' ikke fundet'); else System.out.println(tast + ' fundet'); } }>

>

>

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) # Returner (uændret) node pointer return node # Utility funktion til at søge efter en nøgle i en BST def search(root, key): # Basistilfælde: root er null eller nøgle er til stede ved root, hvis root er Ingen eller root.key == nøgle: returner root # Key er større end roots nøgle hvis root.key returner søgning(root.right, key) # Key er mindre end root 's nøgle returner søgning(root.left, key) # Driverkode hvis __navn__ == '__main__': root = Ingen root = insert(root, 50) insert(root, 30) insert(root, 20) insert (rod, 40) insert(root, 70) insert(root, 60) insert(root, 80) # Nøgle, der skal findes nøgle = 6 # Søger i en BST, hvis søgning(rod, nøgle) er Ingen: print(nøgle, 'ikke fundet') andet: print(nøgle, 'fundet') nøgle = 60 # Søger i en BST, hvis søgning (rod, nøgle) er Ingen: print(nøgle, 'ikke fundet') andet: print(nøgle, 'fundet')>

>

>

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>node.key) node.right = Indsæt(node.højre, nøgle); // Returner (uændret) node pointer return node; } // Utility-funktion til at søge efter en nøgle i en BST offentlig nodesøgning(Node-rod, int-nøgle) // Base Cases: root er null eller nøgle er til stede ved root if (root == null // Driver Code public static void Main () { Node root = null BinaryTree bt = new BinaryTree(); , 40); bt.Insert(root, 70).Insert(root, 80); bt.Search(root, key) == null) Console.WriteLine(nøgle + ' ikke fundet'); if (bt.Search(root, key) == null) Console.WriteLine(nøgle + ' ikke fundet');

streng til tegn
> 




// 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>node.key) { node.right = insert(node.right, key); } // Returner den (uændrede) node pointer return node; } // Hjælpefunktion til at søge efter en nøgle i en BST-funktionssøgning(root, key) { // Grundtilfælde: root er null eller nøgle er til stede ved root if (root === null || root.key === nøgle ) { returner rod; } // Nøglen er større end roots nøgle if (root.key returner søgning(root.right, key); } // Nøglen er mindre end roots nøgle return søgning(root.left, key); } // Driver Code let root = insert(root, 30 insert(root, 40); 60); insert(root, 80); // Key to be found let key = 6; // Søger i en BST if (søg(rod, nøgle) === null) found'); } else { console.log(key + ' found' } key = 60; Søger i en BST if (search(root, key) tast + ' ikke fundet'); } else { console.log(tast + ' fundet' }>

>

>

Produktion

6 not found 60 found>

Tidskompleksitet: O(h), hvor h er højden af ​​BST.
Hjælpeplads: O(h), hvor h er højden af ​​BST. Dette skyldes, at den maksimale mængde plads, der er nødvendig for at opbevare rekursionsstakken, ville være h .

Relaterede links: