二叉搜索树学习

一、简介

如果左子树不为空,则左子树所有结点值都小于根结点的值。
如果右子树不为空,则右子树所有结点值都大于或等于根结点的值。
任意一棵子树也是一棵二叉搜索树。

在这里插入图片描述

二、特点

  • 当你需要完成的功能是插入、删除、检索时,二叉搜索树具有极佳的性能
  • 二叉搜索树在排序、检索、数据库管理系统及人工智能等方面广泛应用
  • 二叉搜索树的中序遍历序列是一个递增的序列

三、二叉搜索树的建立

给定一个序列,对序列的每一个元素插入到二叉搜索树:

  1. 如果二叉搜索树为空,则该元素即为根结点
  2. 如二叉搜索树为非空,如该元素值小于根结点值,插入左子树,否则插入右子树

代码实现

public void insert(TreeNode root, int item) {
	// 如果根结点为空,则元素为根结点
	if (root == null) {
		root= new TreeNode(item)
		return;
	} else if (item < root.val) { // 元素小于根结点值,插入左子树
		insert(root.left, item);
	} else {// 如果元素大于等于根结点值,插入右子树
		insert(root.right, item);
	}
}

四、二叉搜索树的查找

在二叉搜索树中查找给定值的元素

  • 如果二叉搜索树为空,查找失败,返回空
  • 如给定值与根结点比较,如相等则查找成功,若不相等
    • 若给定值小于根结点,则在左子树中继续查找
    • 若给定值大于等于根结点,在右子树中继续查找

代码实现

public boolean searchBST(TreeNode root, int value) {
	
	// 递归终止条件 + 边界问题
	if(root == null) { return false; }
	boolean state = false;
	
	// 如果查找值与当前结点相等,返回真
	if(value == root.val) {state = true; }
	
	// 如果查找值小于根结点值,在左子树中查找
	if(value < root.val) { state = searchBST(root.left,value); }
	
	// 如果查找值大于等于根结点值,在右子树中查找
	if(value >= root.right) { state = searchBST(root.right,value); }

	return state;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值