数据结构(七)二叉搜索树

二叉搜索树

1. 定义

​ 二叉搜索树(BST)也称二叉排序树或二叉查找树

二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质:

  1. 非空左子树的所有键值小于其根结点的键值
  2. 非空右子树的所有键值大于其根结点的键值
  3. 左、右子树都是二叉搜索树

2. 特殊函数

  • BinTree Find(ElementType X,BinTree BST):从二叉搜索树 BST 中查找元素 X,返回其所在结点地址
  • BinTree FindMin(BinTree BST):从二叉搜索树 BST 中查找并返回最小元素所在结点的地址
  • BinTree FindMax(BinTree BST):从二叉搜索树 BST 中查找并返回最大元素所在结点的地址
  • BinTree Insert(ElementType X,BinTree BST):插入一个元素进 BST
  • BinTree Delete(ElementType X,BinTree BST):从 BST 中删除一个元素
1. 查找
  • 查找从根结点开始,如果树为空,返回 NULL
  • 若搜索树不为空,则根结点键值和 X 进行比较,并进行不同处理:
    1. 若 X 小于根结点键值,在左子树中继续查找
    2. 若 X 大于根结点键值,在右子树中继续查找
    3. 如 X 等于根节点键值,查找结束,返回指向此结点的指针
2. 查找最大和最小元素
  • 最大元素一定是在树的最右分支的端结点上

  • 最小元素一定是在树的最左分支的端结点上

3. 删除

删除的三种情况:

  1. 要删除的是叶结点:直接删除,并将其父结点指针置为 NULL

  2. 要删除的结点只有一个孩子结点:将其父结点的指针指向要删除结点的孩子结点

  3. 要删除的结点有左、右两棵子树:用右子树的最小元素左子树的最大元素替代被删除结点

4. 代码实现

#include<iostream>
#include<malloc.h>
using namespace std;
typedef int ElementType;
typedef struct TreeNode *BinTree;
struct TreeNode{
   
	ElementType Data;
	BinTree Left;
	BinTree Right;
};

// 查找递归实现 
BinTree Find(ElementType X,BinTree BST){
   
	if(!BST)  // 如果根结点为空,返回 NULL 
		return NULL; 
	if(X < BST->Data) // 比根结点小,去左子树查找 
		return Find(X,BST->Left); 
	else if(BST->Data < X)  // 比根结点大,去右子树查找 
		return Find(X,BST->Right);
	else if(BST->Data == X) // 找到了 
		return BST;
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值