排序二叉树or搜索二叉树or查找二叉树
来源:互联网 发布:第三方担保平台源码 编辑:程序博客网 时间:2024/06/01 09:43
排序二叉树,搜索二叉树,查找二叉树都是一个意思,只是叫法不同而已。下面的文章中我们统称为排序二叉树。本文主要是针对高中信息学,因此其中不涉及到指针,所有需要用指针的地方都直接使用数组进行模拟。
排序二叉树定义:
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
从定义中我们可以知道:左<根<右;因此使用中序遍历排序二叉树一定是一个递增序列。
节点定义:
建树:
排序二叉树的建立并不难,因为建树的过程就是将值一个一个插入到树中去的过程。例如这里使用随机函数生成100个随机值,然后依次插入到排序二叉树中就完成了建树。
插入元素:向二叉树中插入元素需要通过将待插入的值和某个节点对比,决定是插入到这个节点的左边还是右边。例如要想下面的二叉树中插入21,首先21和3相比,比3大则一定在3的右边,然后21和8比,又大;则到8的右边,而8的右边没有,那么将21插入作为8的右儿子
实现代码:
查找元素:查找元素很容易,只有两种结果:找到和找不到。找到就是其中某个值和要查找的值相等,找不到就是把树都走完了,但是还是没有相等的。查找和插入很相似,同样是通过比较决定到左还是右边去查找。
比如:查找7
1.和12相比小------左
2.和6相比大--------右
3.和8相比小--------左
4.和7相比等--------找到
若是在第3步,8不存在左子树,那么返回找不到
实现代码:
删除元素:
删除元素是排序二叉树中最难的操作,比较繁杂。因为删除一个元素有几种情况:
1.该元素是叶子结点
2.该元素只有左子树
3.该元素只有右子树
4.该元素左右子树都存在
这还没完,我们删除的时候还要判断我们要删除的元素到底是他的父元素的左儿子还是右儿子。以及要判断删除的节点是不是根节点。
其实对于前三种情况都简单;关键是第4种两个子树都存在的情况,这里删除操作有几种方法:
1.找到右子树中最小的值min,然后用min替换要删除的元素,最后删掉min。
2.找到左子树中最大值max,然后用max替换要删除的元素,最后删掉max
3.找到左子树中的最大值max,然后将右子树作为max的右子树,最后将元素删除并让该元素的左儿子上位。
4.和3一样,找到右子树min,然后接上去。。。。。。
这里可以看到这里的四种方式前两种操作起来要容易一些,可以省一些事。
例如我要删除图中的6
1.用7覆盖6,然后删除7
2.5覆盖6,删除5
3.将3作为12的左儿子,然后把6的右儿子连到5的右边
代码实现
- 排序二叉树or搜索二叉树or查找二叉树
- 排序二叉树or搜索二叉树or查找二叉树
- 二叉查找树搜索
- 二叉排序(查找,搜索)树详解
- 二叉排序(查找)树
- 二叉排序(查找)树
- 二叉排序/查找树
- 二叉排序查找树
- 排序二叉树查找
- 二叉树排序查找
- 排序--二叉搜索树
- 二叉搜索树 二叉查找树 二叉排序树
- 二叉查找树(二叉搜索树)
- ZJCOJ qwb与二叉树 dp or 记忆化搜索
- 二叉树排序树(二叉搜索树)
- 二叉搜索树(排序二叉树)
- 平衡二叉树、完全二叉树、满二叉树、二叉搜索(查找 / 排序)树、平衡二叉搜索树、二叉堆
- 查找(1) 二叉搜索树
- 使用Goolge开源工具zxing实现二维码读写工具(带Logo)
- 英文版Excel打开含中文的csv文件乱码的解决办法
- 纯CSS美化input radio和checkbox的样式
- 数据库——事务的ACID
- easydarwin原创文章
- 排序二叉树or搜索二叉树or查找二叉树
- java InputStream读取数据问题
- 4.1(2)写出运行结果
- 跨年呈献:HP-Socket for Linux 1.0 震撼发布
- LibVLC.NET 与WPF绑定播放器
- 查找、替换、子字符串
- Hibernate学习之检索策略(lazy,fetch,batch-size等)
- 给Java新手的一些建议——Java知识点归纳(Java基础部分)
- 关于不重启Tomcat自动加载改变的class文件