📜  二进制搜索树中的迭代搜索

📅  最后修改于: 2021-05-24 22:45:47             🧑  作者: Mango

给定一个二叉搜索树和一个关键字。检查给定密钥是否存在于BST中或不进行递归操作。

请参考二进制搜索树插入以进行递归搜索。

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 not
bool iterativeSearch(struct Node* root, int key)
{
    // Traverse untill 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
struct 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 functions
int 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 recursion
import 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 untill 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 recursion
class 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 untill 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 Code
if __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 recursion
using 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 untill 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


输出:

No