*1.6K*

Question:Given the root pointer to a binary tree, find if an element is present in it.

Input:Sample Tree (Pointer to node 1 is given), Search – 3

Output:Present

One simple way of solving this problem is to find the element in the left sub-tree, in the right sub-tree, and in the root data. This approach can be easily implemented with recursion.

This approach works because each node of the tree has 3 parts -> the root, the left and the right.

What we do is we see if the element is present in these 3 parts.

- Left Sub-tree ->
**Left = 7**(Not matching),**Right = 9**(Not Matching),**Root = 2**(Not Matching) - Right Sub-tree ->
**Left = 5**(Not matching),**Right = 4**(Not Matching),**Root = 3 (Match)** **Root -> 1**(Not Matching)

Since a match was found, we return true.

Here is an implementation using recursion.

#include<stdio.h> #include<malloc.h> struct binaryTreeNode{ int data; struct binaryTreeNode * left; struct binaryTreeNode * right; }; // A recursive function to find the element in tree // Parameters - root of the tree and element to search int findElementInTreeRecursive(struct binaryTreeNode * root, int num) { // A variable for root value int root_val; // Variable to store values in left and right tree int left, right; if(root != NULL) { // Get the root value root_val = root -> data; if(root_val == num) return 1; // Find the element in left sub-tree // If found, we return 1 left = findElementInTreeRecursive(root -> left, num); if(left == 1) return 1; else { // We need to find the element in right sub-tree right = findElementInTreeRecursive(root -> right, num); if(right == 1) return 1; } } // If we reach here, that means the element was not found return 0; }

*Time Complexity:-* O(n)

*Space Complexity:-* O(n)

**Ideone link for running program:-** http://ideone.com/TSCKOM

**Method 2** – Find an element in a binary tree without using recursion.