数据结构-查找-树表(二叉排序树)查找-科班学习笔记

数据结构-查找-树表查找-科班学习笔记

(阅读说明)本篇为查找的第二篇,相关基础概念参考第一篇
查找1
如需运行调试本篇的代码,请前往
可运行代码


树表的查找是基于二叉排序树的,先来看看二叉排序树是什么

二叉排序树(Binary sort tree)

又称二叉查找树,也称二叉搜索树,它的特征是

  • 若它的左子树非空,则左子树上所有结点值(指关键字值)均小于根结点值;
  • 若它的右子树非空,则右子树上所有结点值均大于根结点值
  • 左、右子树本身又各是一棵二叉排序树

注意:二叉排序树中没有相同关键字(key)的结点

结点定义如下

typedef  struct BiTNode	/* 结点结构 */
{
   
	int data;	/* 结点数据 */
	struct BiTNode *lchild, *rchild;	/* 左右孩子指针 */
} BiTNode, *BiTree;

二叉排序树如何查找

将给定的key值(关键字)于二叉排序树的根结点的关键字进行比较

  • 若相等,则查找成功
  • 若小于,则继续在该结点的左子树上进行查找
  • 若大于,则继续在该结点的右子树上进行查找

以上过程是个简单的递归过程

代码如下

/* 递归查找二叉排序树T中是否存在key, */
/* 指针f指向T的双亲,其初始调用值为NULL */
/* 若查找成功,则指针p指向该数据元素结点,并返回TRUE */
/* 否则指针p指向查找路径上访问的最后一个结点并返回FALSE */
Status SearchBST(BiTree T, int key, BiTree f, BiTree *p) 
{
     
	if (!T)	/*  查找不成功 */
	{
    
		*p = f;  
		return FALSE; 
	}
	else if (key==T->data) /*  查找成功 */
	{
    
		*p = T;  
		return TRUE; 
	} 
	else if (key<T->data) 
		return SearchBST(T->lchild, key, T, p);  /*  在左子树中继续查找 */
	else  
		return SearchBST(T->rchild, key, T, p);  /*  在右子树中继续查找 */
}

二叉排序树的插入

在二叉排序树中插入一个关键字为k的新结点,要保证插入后仍满足BST性质

插入过程如下

  • 若二叉排序树T为空,则创建一个key域为k的结点,作之为根
  • 否则将k于根结点的关键字比较,若相等,无需插入,直接返回0
  • 若kkey,则将k插入根结点的左子树
  • 否则插入右子树

以上过程是个简单的递归过程

代码如下

定义代码:</

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值