C++伸展树自顶向下实现

本文介绍了C++中如何实现伸展树的自顶向下算法,包括单旋转、一字型旋转和通过转换处理的之字形旋转。这些操作是伸展树高效查询和更新的关键。
摘要由CSDN通过智能技术生成

伸展树的三种旋转:单旋转,一字型旋转,之字形旋转


为了简化程序,将之字形旋转转变为如下旋转方式:



-SplayTree.h 代码:

/*
 * by: peige
 * 2015/11/29
 */
#ifndef __SPLAY_TREE_H__
#define __SPLAY_TREE_H__

#include <iostream>

template <class T>
struct SplayTreeNode {
	T key;					// 关键字
	SplayTreeNode* left;	// 左儿子
	SplayTreeNode* right;	// 右儿子

	SplayTreeNode(const T& value = T(), SplayTreeNode* lt = NULL, 
		SplayTreeNode* rt = NULL) :key(value), left(lt), right(rt) {}
};


template <class T, class Compare = std::less<T> >
class SplayTree {
private:
	SplayTreeNode<T>*	mRoot;		// 根节点
	Compare				isLessThan;	// Compare

public:
	SplayTree();
	~SplayTree();

	void preOrder()const;	// 前序遍历
	void inOrder()const;	// 中序遍历
	void postOrder()const;	// 后序遍历

	bool find(const T& key);

	T findMin();	// 查找最小结点,返回键值
	T findMax();	// 查找最大结点,返回键值

	void splay(const T& key);	// 旋转key对应的结点为根节点
	void insert(const T& key);	// 将结点(key为结点键值)插入到伸展树中
	void remove(const T& key);	// 删除结点(key为结点键值)

	void destroy();		// 销毁伸展树
	void print()const;	// 打印伸展树

private:
	void preOrder(SplayTreeNode<T>* node)const;
	void inOrder(SplayTreeNode<T>* node)const;
	void postOrder(SplayTreeNode<T>* node)const;

	bool find(SplayTreeNode<T>*& node, const T& key);

	T findMin(SplayTreeNode<T>*& node);
	T findMax(SplayTreeNode<T>*& node);

	// 旋转key对应的节点为根节点,并返回值为根节点
	void splay(SplayTreeNode<T>*& node, const T& key);

	void destroy(SplayTreeNode<T>*& node);
	void print(SplayTreeNode<T>* node, const T& key, const int& direction)const;

	void rotateWithLeftChild(SplayTreeNode<T>*& k1);		// 左单旋
	void rotateWithRightChild(SplayTreeNode<T>*& k1);		// 右单旋
};

// constructor
template <class T, class Compare>
SplayTree<T, Compare>::SplayTree() :mRoot(NULL) {

}

// destructor
template <class T,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值