二叉排序树(折半查找树)模板类实现

本文介绍了二叉排序树(折半查找树)的概念和特性,强调其在数据结构中的重要性。通过分析树的结构,展示了如何进行深度优先搜索(DFS)并得到有序序列。此外,详细阐述了BinSearchTree类的设计,包括构造器、插入、删除和析构等关键操作的实现,特别是删除操作的复杂性,以及如何找到直接后继节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

折半查找树也叫做二叉排序树。所谓的折半查找树就是左子树的所有节点都比跟节点小,右子树的所有节点都比根节点大(不考虑有重复元素的情况)。

上图就是一颗典型的排序二叉树。它是平衡排序二叉树(AVL)的基础。

可以很容易的看出来,上图的dfs序就是从小到大排好序的。

以下内容来自数据结构与STL。

BinSearchTree类的字段如下:

#ifndef _BIN_SEARCH_TREE_
#define _BIN_SEARCH_TREE_
template<class T>
class BinSearchTree {
	struct tree_node {
		T item;
		tree_node *parent, *left, *right;
		bool isHeader;
	};
	tree_node *header;
	unsigned node_count;
};
#endif
节点tree_node中包含了一个数据字段(item),三个指针字段,一个头结点字段(采用头结点形式实现)

BinSearchTree中包含一个指向头结点的指针header,跟一个记录节点个数的node_count字段。

构造器:

BinSearchTree(){ 
		header = new tree_node; 
		header->parent = NULL;//parent指向根节点,在一颗空树中指定根节点是不合理的
		header->left = header;
		header->right = header;
		header->isHeader = true;
		node_count = 0;
	}

在BinSearchTree中添加一个迭代器类Iterator。

#ifndef _BIN_SEARCH_TREE_
#define _BIN_SEARCH_TREE_
template<class T>
class BinSearchTree {
	struct tree_node {
		T item;
		tree_node *parent, *left, *right;
		bool isHeader;
	};
	typedef tree_node *Link;
	tree_node *header;
	unsigned node_count;
protected:
	class Iterator {
	protected:
		Link link;
	public:
		Iterator() {}
		Iterator(Link new_link) :link(new_link) {}
	};
public:
	BinSearchTree(){ 
		header = new tree_node; 
		header->parent = NULL;//parent指向根节点,在一颗空树中指定根节点是不合理的
		header->left = header;
		header->right = header;
		header->isHeader = true;
		node_count = 0;
	}
};
#endif
向BinSearchTree类中添加size方法:

unsigned size() {
		return node_count;
	}
下面分别添加find,insert,erase方法。

Iterator find(const T& item) {
		Link parent = header;
		Link child = header->paren
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值