算法基础期末考点总结十二——二叉搜索树

从这章开始,变得难了起来。

性质

首先介绍二叉搜索树是什么。二叉搜索树首先是棵树,又因为是二叉树,所以一个节点至多有两个儿子,再因为是搜索树,要方便搜索,所以人为规定,搜索树上节点的左子树所有点小于节点,右子树所有点大于节点。

算法

如果你要重头自己写一个二叉搜索树算法的话,接下来介绍的顺序便是写代码的顺序。

中序遍历

在这里插入图片描述
图论教过,不再赘述。

递归查找

在这里插入图片描述
三种情况:找到了,在左子树,在右子树。

非递归查找

在这里插入图片描述
大大减少空间复杂度。

找最大值

在这里插入图片描述
利用的二叉搜索树的性质。

找最小值

在这里插入图片描述

找后继

在这里插入图片描述
3种情况:
1.x有右儿子,那么找右子树上的最小值即可;
2.x没有右儿子,但它又不是整颗树的最大值,还是有后继的(这是很容易忽略的情况),那它的后继就是追溯祖先时第一个左父亲(左儿子追溯上去的),下面给个图方便理解
在这里插入图片描述
3.x没有右儿子,是整颗树的最大值,这里要明确一点,根节点的父亲我们定为NIL,所以按照算法,如果是这种情况,返回的y就是NIL。

求前驱

前驱的算法和后继的算法是对称的,右子树对左子树,左父亲对右父亲。

插入

这里是重点
在这里插入图片描述
在这里插入图片描述
算法很简单,做3件事情:
1.给插入节点找父亲
2.验证树是否为空(这里要明确一点,T是一个结构体,T.root存着树根)
3.看插入节点是左儿子还是右儿子

删除

这也是重点。
在写删除算法之前,先封装了一个函数:
在这里插入图片描述
函数的作用是用以v为根的子树替代以u为根的子树。
在这里插入图片描述
算法主体部分:
在这里插入图片描述
四种情况:
1.删除节点只有右儿子,那么子承父业。
2.删除节点只有左儿子,那么也子承父业。
3.删除节点左右儿子都有,找其后继
(3.a).后继就是右儿子(即右儿子没有左儿子),子承父业,还继承了遗产——左儿子
(3.b).后继不是右儿子,那么这个后继一定没有左儿子,它的右儿子子承父业,然后这个后继继承遗产——右儿子和左儿子

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值