二叉搜索树及其基本操作

二叉搜索树的概念

二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:
(1)若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
(2)若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
(3)它的左右子树也分别为二叉搜索树
对二叉搜索树进行中序遍历可以得到一个有序序列。
二叉搜索树例子
一个二叉搜索树例子 int a [] = {5,3,4,1,7,8,2,6,0,9};

二叉树搜索树的节点结构

二叉搜索树的节点内有三个变量,分别是指向左右两个孩子节点的指针和其自身的值域。

template<class T>
struct  BSTNode
{
   
	BSTNode(const T& val= T())
		: left(nullptr)
		, right(nullptr)
		, data(val)
	 {
   }
	BSTNode<T>* left;
	BSTNode<T>* right;
	T data;
};

二叉搜索树的查找

若根节点不为空:
1.如果根节点的值等于查找的值,返回根节点的地址。
2.如果根节点的值大于查找的值,则在其左子树中查找。
3.如果跟姐点的值小于,则在其右子树中查找。
否则,返会空指针。

Node* Find(const T& data)  //查找
	{
   
		Node* cur = root;
		while (cur)
		{
   
			if (data == cur->data)
				return cur;
			else if (data < cur->data)
				cur = cur->left;
			else
				cur = cur->right;
		}
		return nullptr;
	}

二叉搜索树的插入

(1)若树为空,则直接插入,即让根节点直接指向待插入节点。
(2)若树不为空,按照二叉树搜索树性质查找插入位置,并保存其父节点位置,然后插入新节点。
在学习时,我发现实现的算法,一般都是在叶子节点的位置插入,而去插入的值不会与二叉搜索树中值重复。因此,我在想要是遇到插入的位置是非叶子节点或者插入重复值这种情况应该怎么处理。在网上查找资料发现,1

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值