头文件 binarySearch.h
#ifndef BINARYSEARCH_H_INCLUDED
#define BINARYSEARCH_H_INCLUDED
#include "stdbool.h"
#include "stddef.h"
#include "stdlib.h"
#include "ASSERT.h"
typedef struct Node{
int key;
int value;
struct Node *left;
struct Node *right;
}Node;
typedef struct BST{
struct Node *root;
int count;
}BST;
int binarySearch(int arr[],int n,int target);
int binarySearch2(int arr[],int l,int r,int target);
void init_BST(BST *bst);
void insert_BST(BST *bst,int key,int value);
int size_BST(BST *bst);
int isEmpty_BST(BST *bst);
bool contain_BST(BST *bst,int key);
int* search_BST(BST *bst,int key);
int* preOrder_BST(BST *bst);
int* inOrder_BST(BST *bst);
int* postOrder_BST(BST *bst);
int min_BST(BST *bst);
int max_BST(BST *bst);
void removeMin_BST(BST *bst);
void removeMax_BST(BST *bst);
void remove_BST(BST *bst,int key);
#endif // BINARYSEARCH_H_INCLUDED
c代码 binarySearch.c
#include "binarySearch.h"
/*********************************************
*函数名:二分查找法,在有序数组中查找target
* 如果找到target就返回索引,否则返回-1
*********************************************/
int binarySearch(int arr[],int n,int target){
//在arr[l,r]中查找target
int l = 0,r = n-1;
while(l <= r){
//int mid = (l+r)/2;
int mid = l + (r-l)/2;
if(arr[mid] == target){
return mid;
}
else if(arr[mid] > target){
r = mid - 1;
}
else{
l = mid + 1;
}
}
return -1;
}
/*********************************************
*函数名:递归二分查找法,在有序数组中查找target
* 如果找到target就返回索引,否则返回-1
*********************************************/
int binarySearch2(int arr[],int l,int r,int target){
//在arr[l,r]中查找target
while(l <= r){
//int mid = (l+r)/2;
int mid = l + (r-l)/2;
if(arr[mid] == target){
return mid;
}
else if(target < arr[mid]){
return binarySearch2(arr,l,mid-1,target);
}
el