二叉搜索树

本文详细介绍了二叉搜索树的概念,包括其定义、查找、插入和删除节点的算法,以及二叉搜索树在排序问题中的应用。查找算法遵循小于根节点查找左子树,大于根节点查找右子树的原则。插入算法根据节点值决定插入左子树或右子树。删除算法涉及叶子节点、单子树节点和双子树节点的处理。此外,还讨论了中序遍历在排序问题中的作用。
摘要由CSDN通过智能技术生成

定义

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树

二叉查找树的查找、插入、删除节点的算法复杂度均为(o(log(n))

查找算法

在二叉排序树b中查找x的过程为:

若b是空树,则搜索失败,否则:

若x等于b的根结点的数据域之值,则查找成功;否则:

若x小于b的根结点的数据域之值,则搜索左子树;否则:

查找右子树。

插入算法

向一个二叉排序树b中插入一个结点s的算法,过程为:

若b是空树,则将s所指结点作为根结点插入,否则:

若s->data等于b的根结点的数据域之值,则返回,否则:

若s->data小于b的根结点的数据域之值,则把s所指结点插入到左子树中,否则:

把s所指结点插入到右子树中。

删除算法

在二叉排序树删去一个结点,分三种情况讨论:

若*p结点为叶子节点,即PL(左子树)和PR(右子树)均为空树。由于删去叶子结点不破坏整棵树的结构,则只需修改其双亲结点的指针即可。

若*p结点只有左子树PL或右子树PR,此时只要令PL或PR直接成为其双亲结点*f的左子树或右子树即可,作此修改也不破坏二叉排序树的特性。

若*p结点的左子树和右子树均不空。首先我们需要找到待删除节点的左子树上的最大值节点,或者右子树上的最小值节点,然后将该节点的参数值与待删除的节点参数值进行交换,最后删除该节点,这样需要删除的参数就从该二叉树中删除了。(虽然听起来怪怪的,但其实是正确的,可自行验证)

二叉搜索树的排序问题

遍历一棵树是指访问树的每个节点并对它们进行某种操作的过程,访问树的所有节点的方式有三种:中序、先序、后序

中序遍历是一种以上行方式访问BST所有节点的遍历方式,也就是按照从小到大的顺序访问树中所有节点。中序遍历的一种应用就是对栈进行排序操作。在遍历过程中最常使用的就是递归。

先序遍历是按照根左右的方式访问树中所有节点,先序遍历的一种应用就是打印一个结构化的文档。

后序遍历是按照左右根的方式访问树中所有节点,后序遍历的一种应用就是计算一个目录和它的子目录中的所有文件所占空间的大小。

参考:https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91/7077855

           http://www.cnblogs.com/huting-front/p/9392493.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值