数据结构——树表的查找(二叉排序树)

树表的查找

  当表插入、删除操作频繁时,为维护表的有序性,需要移动表中很多记录。
  改用动态查找表——几种特殊的树
在这里插入图片描述
  
  

二叉排序树(Binary Sort Tree)

二叉排序树(Binary Sort Tree)又称为二叉搜索树、二叉查找树,

定义:
二叉排序树或是空树,或是满足如下性质的二叉树:
  1)若其左子树非空,则左子树上所有结点的值均小于根结点的值;
  2)若其右子树非空,则右子树上所有结点的值均大于等于根结点的值;
  3)其左右子树本身又各是一棵二叉排序树
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  
  

二叉排序树的操作——查找

在这里插入图片描述
  
  

二叉排序树的存储结构

typedef struct{
	KeyType key;			//关键字项
	InfoType otherinfo;		//其他数据域
}ElemType;
typedef struct BSTNode{
	ElemType data;						//数据域
	struct BSTNode *lchild, *rchild;	//左右孩子指针
}BSTNode, *BSTree;

BSTree T;	//定义二叉排序树T

算法思想:
1)二叉排序树为空,则查找失败,返回空指针
2)若二叉排序树非空,将给定值key与根结点的关键字T − - >data.key进行比较:
  ①若key等于T − - >data.key,则查找成功,返回根结点地址;
  ②若key小于T − - >data.key,则进一步查找左子树;
  ③若key大于T − - >data.key,则进一步查找右子树。

算法:

BSTree SearchBST(BSTree T, KeyType key){
	if((!T) || key == T -> data.key)
		return T;
	else if(key < T-> data.key)
		return SearchBST(T -> lchild, key);		//在左子树中继续查找
	else return SearchBST(T -> rchild, key);	//在右子树中继续查找
}//SarchBST

  
  

二叉排序树的查找分析

含有n个结点的二叉排序树的平均查找长度和树的形态有关
在这里插入图片描述
  
  

二叉排序树的插入

在这里插入图片描述
在这里插入图片描述

  • 若二叉排序树为空,则插入结点作为根结点插入到空树中
  • 否则,继续在其左、右子树上查找
    • 树中已有,不再插入
    • 树中没有
      • 查找直至某个叶子结点的左子树或右子树为空为止,则插入结点应为该叶子结点的左孩子或右孩子

  
  

二叉排序树的生成

  从空树出发,经过一系列的查找、插入操作之后,可生成一颗二叉排序树
在这里插入图片描述
  一个 无序序列可通过构造二叉树而变成一个有序序列,构造树的过程就是对无序序列进行排序的过程

在这里插入图片描述
  
  

二叉排序树的删除

  从二叉排序树中删除一个结点,不能把以该结点为根的子树都删除,只能删掉该结点,并且还应保证删除后所得的二叉树仍然满足二叉排序树的性质不变
  由于中序遍历二叉排序树可以得到一个递增有序的序列。那么,在二叉排序树中删除一个结点相当于删去有序序列中的一个结点

  • 将因删除结点而断开的二叉链表重新链接起来
  • 防止重新链接后树的高度增加

在这里插入图片描述
其双亲结点中相应指针域的值改为“空”

在这里插入图片描述
其双亲结点的相应指针域的值改为“指向被删除结点的左子树或右子树”
  

在这里插入图片描述
  

将其中序前趋替换,然后再删除该前趋结点;前趋是左子树中最大的结点
也可以用其后继替换之,然后再删除该后继结点;后继是右子树中最小的结点
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值