SJTU 利用二叉查找树的logk插入

搜索插入位置

【问题描述】

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。数组中无重复元素,下标从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()
{
   
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值