搜索插入位置
【问题描述】
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。数组中无重复元素,下标从0开始。
【输入形式】
输入一共三行。
第一行是一个正整数N,代表数组的长度。
第二行有N个数,代表排序数组,用空格隔开。
第三行是目标值。
【输出形式】
若目标值存在数组中,返回索引。否则,返回它被按顺序插入的位置。
【样例输入1】
4
1 3 5 6
5
【样例输出1】
2
【样例输入2】
4
1 3 5 6
2
【样例输出1】
1
【评分标准】
要求时间复杂度是O(log n)
#pragma once
#include<iostream>
using namespace std;
template <class KEY, class OTHER>
struct SET {
KEY key;
OTHER other;
};
template <class KEY, class OTHER>
class BinarySearchTree
{
private:
struct BinaryNode
{
SET <KEY, OTHER>data;
BinaryNode*left;
BinaryNode*right;
BinaryNode(const SET<KEY, OTHER>&thedata, BinaryNode*lt = NULL, BinaryNode*rt = NULL):
data(thedata),left(lt),right(rt){
}
};
BinaryNode*root;
public:
BinarySearchTree();
~BinarySearchTree();
SET<KEY, OTHER>*find(const KEY &x)const;
void insert(const SET<KEY, OTHER>&x);
void insert_x(const SET<KEY, OTHER>&x);//专门为a准备
void remove(const KEY&x);
private:
void Insert(const SET<KEY, OTHER>&x, BinaryNode*&t);
void Insert_x(const SET<KEY, OTHER>&x, BinaryNode*&t);
void Remove(const KEY&x);
SET<KEY, OTHER>*Find(const KEY&x)const;
void makeEmpty(BinaryNode*t);
};
template<class KEY, class OTHER>
BinarySearchTree<KEY, OTHER>::BinarySearchTree()
{
root = NULL;
}
template<class KEY, class OTHER>
BinarySearchTree<KEY, OTHER>::~BinarySearchTree()
{