1维KD-Tree查找指定范围内的元素

OneKdTree.h

#include <algorithm>
#include <set>
#include <iostream>

using namespace std;

class AvlTree;

class AvlNode{
	friend class AvlTree;
	int data;
	int height;
	AvlNode *left;
	AvlNode *right;
	AvlNode(int _data) :data(_data), height(0), left(NULL), right(NULL){}
};

class AvlTree{
	AvlNode *root;
public:
	AvlTree() :root(NULL){}
	int Height(AvlNode *node){ return node == NULL ? -1 : node->height; }
	void Insert(int _data){ _insert(root, _data); }
	void Delete(int _data){ _delete(root, _data); }
	bool Find(int _data);
	void print(){ travel(root); cout << endl; }
	void OneDRangeQuery(int low, int high);
private:
	AvlTree(const AvlTree &);
	AvlTree& operator=(const AvlTree&);
	void LL(AvlNode* &node);
	void RR(AvlNode* &node);
	void RL(AvlNode* &node);
	void LR(AvlNode* &node);
	void _insert(AvlNode* &node,int  _data);
	void _delete(AvlNode* &node, int  _data);
	void travel(AvlNode *node);
	AvlNode *FindMin(AvlNode *node);
	AvlNode *FindParent(AvlNode *node, int _data);
	void ParentRotate(AvlNode* &node, AvlNode* &parent);
	void LeftHigherhanRight(AvlNode* &node);
	void RightHigherhanLeft(AvlNode* &node);
	AvlNode* FindSplitNode(int low, int high);
};

void AvlTree::OneDRangeQuery(int low, int high)
{
	AvlNode *node = FindSplitNode(low, high);
	if (node == NULL)
		return;
	if (node->left == NULL&&node->right == NULL){
		if (node->data >= low && node->data <= high)
			cout << node-&g
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值