# Iterative searching in Binary Search Tree

Given a binary search tree and a key. Check the given key exists in BST or not without recursion.

Please refer binary search tree insertion for recursive search.

## C++

 // C++ program to demonstrate searching operation// in binary search tree without recursion#include using namespace std; struct Node {    int data;    struct Node *left, *right;}; // Function to check the given key exist or notbool iterativeSearch(struct Node* root, int key){    // Traverse until root reaches to dead end    while (root != NULL) {        // pass right subtree as new tree        if (key > root->data)            root = root->right;         // pass left subtree as new tree        else if (key < root->data)            root = root->left;        else            return true; // if the key is found return 1    }    return false;} // A utility function to create a new BST Nodestruct Node* newNode(int item){    struct Node* temp = new Node;    temp->data = item;    temp->left = temp->right = NULL;    return temp;} /* A utility function to insert a new Node with   given key in BST */struct Node* insert(struct Node* Node, int data){    /* If the tree is empty, return a new Node */    if (Node == NULL)        return newNode(data);     /* Otherwise, recur down the tree */    if (data < Node->data)        Node->left = insert(Node->left, data);    else if (data > Node->data)        Node->right = insert(Node->right, data);     /* return the (unchanged) Node pointer */    return Node;} // Driver Program to test above functionsint main(){    /* Let us create following BST              50            /    \          30      70         /  \    /  \       20   40  60   80 */    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);    if (iterativeSearch(root, 15))        cout << "Yes";    else        cout << "No";    return 0;}

## Java

 // Java program to demonstrate searching operation// in binary search tree without recursionimport java.util.*; class GFG {     static class Node {        int data;        Node left, right;    };     // Function to check the given key exist or not    static boolean iterativeSearch(Node root, int key)    {        // Traverse until root reaches to dead end        while (root != null) {            // pass right subtree as new tree            if (key > root.data)                root = root.right;             // pass left subtree as new tree            else if (key < root.data)                root = root.left;            else                return true; // if the key is found return 1        }        return false;    }     // A utility function to create a new BST Node    static Node newNode(int item)    {        Node temp = new Node();        temp.data = item;        temp.left = temp.right = null;        return temp;    }     /* A utility function to insert a new Node with given key in BST */    static Node insert(Node Node, int data)    {        /* If the tree is empty, return a new Node */        if (Node == null)            return newNode(data);         /* Otherwise, recur down the tree */        if (data < Node.data)            Node.left = insert(Node.left, data);        else if (data > Node.data)            Node.right = insert(Node.right, data);         /* return the (unchanged) Node pointer */        return Node;    }     // Driver code    public static void main(String args[])    {        /* Let us create following BST             50             / \         30 70         / \ / \     20 40 60 80 */        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);        if (iterativeSearch(root, 15))            System.out.println("YES");        else            System.out.println("NO");    }} // This code is contributed by Arnab Kundu

## Python3

 # Python program to demonstrate searching operation # in binary search tree without recursionclass newNode:      # Constructor to create a new node     def __init__(self, data):         self.data = data         self.left = None        self.right = None # Function to check the given # key exist or not def iterativeSearch(root, key):         # Traverse until root reaches     # to dead end     while root != None:                 # pass right subtree as new tree         if key > root.data:             root = root.right         # pass left subtree as new tree        elif key < root.data:            root = root.left         else:            return True # if the key is found return 1     return False # A utility function to insert a # new Node with given key in BST def insert(Node, data):         # If the tree is empty, return     # a new Node     if Node == None:        return newNode(data)      # Otherwise, recur down the tree     if data < Node.data:         Node.left = insert(Node.left, data)     elif data > Node.data:         Node.right = insert(Node.right, data)     # return the (unchanged) Node pointer     return Node # Driver Codeif __name__ == '__main__':         # Let us create following BST     # 50     # 30     70     # / \ / \     # 20 40 60 80     root = None    root = insert(root, 50)     insert(root, 30)     insert(root, 20)     insert(root, 40)     insert(root, 70)     insert(root, 60)     insert(root, 80)    if iterativeSearch(root, 15):         print("Yes")     else:        print("No")  # This code is contributed by PranchalK

## C#

 // C# program to demonstrate searching operation// in binary search tree without recursionusing System; class GFG {     public class Node {        public int data;        public Node left, right;    };     // Function to check the given key exist or not    static bool iterativeSearch(Node root, int key)    {        // Traverse until root reaches to dead end        while (root != null) {            // pass right subtree as new tree            if (key > root.data)                root = root.right;             // pass left subtree as new tree            else if (key < root.data)                root = root.left;            else                return true; // if the key is found return 1        }        return false;    }     // A utility function to create a new BST Node    static Node newNode(int item)    {        Node temp = new Node();        temp.data = item;        temp.left = temp.right = null;        return temp;    }     /* A utility function to insert a new Node with given key in BST */    static Node insert(Node Node, int data)    {        /* If the tree is empty, return a new Node */        if (Node == null)            return newNode(data);         /* Otherwise, recur down the tree */        if (data < Node.data)            Node.left = insert(Node.left, data);        else if (data > Node.data)            Node.right = insert(Node.right, data);         /* return the (unchanged) Node pointer */        return Node;    }     // Driver code    public static void Main(String[] args)    {        /* Let us create following BST             50             / \         30 70         / \ / \     20 40 60 80 */        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);        if (iterativeSearch(root, 15))            Console.WriteLine("YES");        else            Console.WriteLine("NO");    }} // This code has been contributed by 29AjayKumar

## Javascript



Output
No

Time Complexity: O(h), here h is the height of the BST.
Auxiliary Space: O(1), as constant extra space is used.

Previous
Next
Share your thoughts in the comments
Similar Reads