从二叉搜索树(Binary Search Tree)入手,学习C++中类的构建 --(一)BST与基本框架

一、二叉搜索树

二叉搜索树(以下简称BST)是树形数据结构的常见应用之一,其特点是:

1 - 插入单个元素操作 (Insert) 的时间复杂度为 O(lgn)

2 - 构建二叉搜索树的时间复杂度为: O(nlgn) [最优情况] ,O(n^2) [最差情况].

最优情况 —— 平衡二叉树

最差情况 —— 构建所用序列是严格有序的,则构建出的搜索树高度为n,所有节点只有左叶子或右叶子

3 - 中序遍历获得排序后队列的时间复杂度为 O(n)

4 - 核心原理与快排相同,区别在于比较顺序不同 (Make same comparision, but in a different order.)

二、伪代码实现插入(Insert)

def Insert(value):
	if HEAD==NULL:
		HEAD = Create(value)
		return
	if value < HEAD.value:
		if HEAD.left == NULL
			HEAD.left = Create(value)
			return
		Insert(HEAD.left)
	else
		if HEAD.right == NULL
			HEAD.right = Create(value)
			return
		Insert(HEAD.right)

三、Class BST 的基本框架——需要的成员

我们希望实现的Class应该是这样的:

1 -- vector<type> number 是存放希望构建成BST的一组数据,创建类的时候如下调用——

BST tree(number);
然后此时类中就应该已经具有一颗构建好的二叉树,我们可以通过公开的 头结点head访问。

2 -- 二叉搜索树的中序遍历应该同样包含在类中。而且我们希望在调用构造函数时,就能够产生一个有序的vector<type> sortedTree,可以获得排列后的序列.

3 -- 搜索、删除、插入功能

4 -- 更多样化的构造函数


有了以上的种种构思,初步可以创建下面这样一个基本的class BST:

struct Node {
	int val;
	Node* left;
	Node* right;
	Node(int x): val(x),left(NULL),right(NULL) {};
};

class BST {
public:
	Node* head;
	vector<Node*> sortedTree;
	void inorderBST( );
	void deleteNode();
	void insertNoed();
	void searchNode();
	BST(const vector<int>&);
	~BST();
};

我们还可以添加更多的进阶功能,比如说给inorderBST()函数添加一个重载,可以传入一个自定函数指针,实现对于节点的自定义操作。(类似于C的qsort函数)

void BST::inorderBST(Node* head,funct fun,void* argument)

或者为BST提供多种遍历方式,添加前序遍历、后序遍历。等等……

总之任何功能都可以被添加进自定义的搜索树中,我们将在后面的部分中逐渐实现。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值