二叉搜索树C语言探讨与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二叉搜索树的详解
所谓二叉搜索树,就是指对包括树本身的任何一棵子树,左子树的值要小于根节点,右子树的值要大于根节点。以便在搜索的时候能够从根节点开始一直往下检索。在搜索树构造合理的情况下复杂度是。
这里主要介绍二叉搜索树的创建和查询以及增加节点和删除节点。
先定义节点的结构体:
为了索引更加方便,定义了父节点。
二叉搜索树的创建
二叉搜索树的显示
二叉搜索树的插入
二叉搜索树的删除
完整代码:链接:
密码:
二叉搜索树的创建
二叉搜索树的创建分为直接创建和随机创建。所谓直接创建,就是拿到一系列树以后,根据原有数据的顺序依次以增加节点的方式扩展原二叉搜索树。而随机创建就是指创建二叉树的过程随机的从给定树种随机选取一个点加入二叉搜索树。先来介绍直接创建的办法:
先创建根节点
判空
寻找下一个节点插入的位置
这里有两点要注意的:是用来表示往下后的父节点。新节点要插入的位置的父节点,它一定不会是有两个孩子的节点。如果比插入点的值要
大,则父节点一定没有左孩子;如果比插入点的值要小,则没有右孩子。
插入节点
直接创建的整个函数为:
二叉树的查找
这里要注意的是,我们认为在二叉查找数中的关键字是没有重复,如果有重复的只会查找到其中一个,而无法保证返回所有的值。
用递归的方法是最简单的方法:
如果为空,或者找到关键词
搜索左子树
搜索右子树
二叉树的显示(层次遍历)
二叉树的层次遍历现在主要事采用队列的方法来处理:队列的原理性的内容随便百度都有,这里直接上源码
值得注意的是,虽然我们定义的节点是带有父节点的内容,但是实际上我们的遍历算法并没有用到父节点,具有一般适应性。
记录层数
初始化
遍历过程
判断是否还有节点
判断和上一个节点是不是同一层,如果不是则分行将节点加入暂存数组并记录层数
在这里,效果如下所示
6
4
2578
二叉树的插入
二叉树的删除
只有右子树
只有左子树
寻找代替节点的节点,右子树的最小节点即可代替
如果即将代替的节点,如果恰好不是的子节点
处理节点挪走后的续接问题,值得注意的是由于节点是右子树的最小节点
,所以节点不会有左子树