Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Welcome to All Test Answers

Binary Tree Search using C programming

Write function binaryTreeSearch that attempts to locate a specified value in a binary search tree. The function should take as arguments a pointer to the root node of
the binary tree and a search key to be located. If the node containing the search key is found, the function should return a pointer to that node; otherwise, the function should return a NULL pointer.

Answer:’


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// TreeNode structure definition
struct TreeNode { 
   struct TreeNode *leftPtr;  // pointer to left subtree
   int data;// node data
   struct TreeNode *rightPtr; // pointer to right subtree
}; // end struct TreeNode

typedef struct TreeNode TreeNode;
typedef TreeNode *TreeNodePtr;

// function prototypes
void insertNode( TreeNodePtr *treePtr, int value );
TreeNodePtr binaryTreeSearch( TreeNodePtr treePtr, const int key );

int main( void )
{ 
   int i; // loop counter
   int item; // random value to insert in tree
   int searchKey; // value to search for
   TreeNodePtr rootPtr = NULL; // points to the tree root
   TreeNodePtr searchResultPtr; // pointer to search result

   srand( time( NULL ) ); // randomize
   puts( "The numbers being placed in the tree are:" );

   // insert random values between 1 and 20 in the tree
   for ( i = 1; i <= 10; ++i )
 { item = 1 + rand() % 20; 
printf( "%3d", item ); 
insertNode( &rootPtr, item );
 } // end for 
// prompt user and read integer search key 
printf( "%s", "\n\nEnter an integer to search for: " );
 scanf( "%d", &searchKey ); 
searchResultPtr = binaryTreeSearch( rootPtr, searchKey );
 // if searchKey not found 
if ( searchResultPtr == NULL ) { 
printf( "\n%d was not found in the tree.\n\n", searchKey );
 } // end if
 else { // if key found 
printf( "\n%d was found in the tree.\n\n", searchResultPtr->data );
   } // end else
} // end main

// insert a node into the tree
void insertNode( TreeNodePtr *treePtr, int value )
{ 
   // if treePtr is NULL
   if ( *treePtr == NULL ) {    
      // dynamically allocate memory
      *treePtr = malloc( sizeof( TreeNode ) );
   
      // if memory was allocated, insert node
      if ( *treePtr != NULL ) { 
         ( *treePtr )->data = value;
         ( *treePtr )->leftPtr = NULL;
         ( *treePtr )->rightPtr = NULL;
      } // end if
      else {
         printf( "%d not inserted. No memory available.\n", value );
      } // end else
   } // end if
   else { // recursively call insertNode
      // insert node in left subtree
      if ( value < ( *treePtr )->data ) {
         insertNode( &( ( *treePtr )->leftPtr ), value );
      } // end if
      else { 
         // insert node in right subtree
         if ( value > ( *treePtr )->data ) {
            insertNode( &( ( *treePtr )->rightPtr ), value );
         } // end if
         else { // duplicate value
            printf( "%s", "dup" );
         } // end else
      } // end else
   } // end else
} // end function insertNode

// search for key in tree
TreeNodePtr binaryTreeSearch( TreeNodePtr treePtr, const int key )
{ 
   // traverse the tree inOrder
   if ( treePtr == NULL ) {
      return NULL; // key not found
   } // end if
   else if ( treePtr->data == key ) {
      return treePtr; // key found
   } // end else if
   else if ( key < treePtr->data ) {
      return binaryTreeSearch( treePtr->leftPtr, key ); // search left
   } // end else if
   else if ( key > treePtr->data ) {
      return binaryTreeSearch( treePtr->rightPtr, key ); // search right
   } // end else if

   return NULL;
} // end function binaryTreeSearch

About

Leave a reply

Captcha Click on image to update the captcha .

error: Content is protected !!