Search a node in Binary Tree

Given a Binary Node and a node. The task is to search and check if the given node exits in the binary tree or not. If it exists, print YES otherwise print NO.

Given Binary Tree:

Examples:

Input : Node = 4
Output : YES

Input : Node = 40
Output : NO

The idea is to use any of the tree traversals to traverse the tree and while traversing check if the current node matches with the given node. Print YES if any node matches with the given node and stop traversing further and if the tree is completely traversed and none of the node matches with the given node then print NO.

Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check if a node exists
// in a binary tree
#include <iostream>
using namespace std;
  
// Binary tree node
struct Node {
    int data;
    struct Node *left, *right;
    Node(int data)
    {
        this->data = data;
        left = right = NULL;
    }
};
  
// Function to traverse the tree in preorder
// and check if the given node exists in it
bool ifNodeExists(struct Node* node, int key)
{
    if (node == NULL)
        return false;
  
    if (node->data == key)
        return true;
  
    /* then recur on left sutree */
    bool res1 = ifNodeExists(node->left, key);
  
    /* now recur on right subtree */
    bool res2 = ifNodeExists(node->right, key);
  
    return res1 || res2;
}
  
// Driver Code
int main()
{
    struct Node* root = new Node(0);
    root->left = new Node(1);
    root->left->left = new Node(3);
    root->left->left->left = new Node(7);
    root->left->right = new Node(4);
    root->left->right->left = new Node(8);
    root->left->right->right = new Node(9);
    root->right = new Node(2);
    root->right->left = new Node(5);
    root->right->right = new Node(6);
  
    int key = 4;
  
    if (ifNodeExists(root, key))
        cout << "YES";
    else
        cout << "NO";
  
    return 0;
}

chevron_right


Output:

YES


My Personal Notes arrow_drop_up