C++:二叉搜索树的底层模拟实现

本文详细介绍了二叉搜索树的概念、节点结构,以及插入、查找、删除操作的实现,包括特殊情况的处理,以及中序遍历的使用。重点讨论了如何确保插入和删除操作后树的性质不变以及特殊情况下的调整策略。

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


 

概念:

二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:

搜索二叉树的操作:

int a[] = {8, 3, 1, 10, 6, 4, 7, 14, 13};
  • 二叉搜索树需要满足左子树比根小,右子树比根大,每一棵树,每一颗子树都需要满足这个条件
  • 二叉搜索树使用中序遍历后,得出的遍历结果一定是一个升序序列
  • 二叉搜索树的的查询操作雷素与二分查找,但是却比二分查找要来的简单,因为搜索二叉树的删除和插入操作比二分查找更为的简单,且并不需要二分查找一样,当插入和删除后必须要在经历一次排序操作。 
  • 最后二叉搜索树是不允许进行节点内部的value 也就是节点数值的修改,这是因为二叉搜索树的排序操作和树的结构是因为节点的value进行链接和形成的

节点结构:

	template<class K>
	//struct BinarySearchTreeNode
	struct BSTreeNode
	{
        
		BSTreeNode<K>* _left;//指向左子树指针
		BSTreeNode<K>* _right;//指向右子树指针
		K _key;//用来进行排序的value数值

		BSTreeNode(const K& key)//节点的初始化列表
			:_left(nullptr)
			, _right(nullptr)
			, _key(key)
		{}
	};

插入操作:

 二叉搜索树的插入 插入的具体过程如下:

a. 树为空,则直接新增节点,赋值给root指针

b. 树不空,按二叉搜索树性质查找插入位置,插入新节点

因为插入时需要保证插入之后还是二叉搜索树,所以插入操作需要进行一次的对比, 例如插入数字5,如果需要插入数字5,那么就需要进行依次的对比!

也就是和每一个节点进行对比,从根节点开始,比对比的节点小往左边移动,比对比的节点大往右移动,直到走到最后一个节点,走向空,需要记住每次插入的节点(非重复)最后都是会插入一个空的位置。

同时还需要注意,当插入的数据已经在树中存在了,而就需要注意搜索树中不会冗余,也就是插入一个相同的元素是不允许在同一个树中出现两次,这是不允许的!除非需要一些扩展。

		bool Insert(const K&
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值