数据结构之二叉排序树
来源:互联网 发布:2017学校网络改造方案 编辑:程序博客网 时间:2024/06/06 01:57
转自 : http://www.toutiao.com/a6397275884143526145/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=7822224697&utm_medium=toutiao_ios
定义
二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
下面看一个例子
左孩子比父节点小,右孩子比父节点大。
这样构建一棵树,可能会成一条链,退化成链表,而二叉平衡树能很好的解决这种情况,二叉平衡树以后再说,先看看如何用代码建立一颗二叉平衡树。
相对应的有一些操作:
查找
若根结点的关键字值等于查找的关键字,成功。
否则,若小于根结点的关键字值,递归查左子树。
若大于根结点的关键字值,递归查右子树。
若子树为空,查找不成功。
插入
插入就相当于在原有的树上再添加一个节点,规则还是和建树时一样。
删除
当节点是叶子节点时,直接删除就可以了。
当删除节点只有左子树或者只有右子树,直接把要删除节点的孩子上移就可以了。
当删除节点(p)有左孩子也有右孩子,找到其左孩子的最右边的结点(r),用该结点(r)来替代删除的节点(p),把节点(r)的左孩子作为节点(r)的父亲的右孩子。
比如(第3种)
删除47,找到47的左孩子35,然后再找35最右面的孩子37,37就放到删除节点的位置,37的右孩子36放到37的父亲节点的右孩子处。
- 数据结构之二叉排序树
- 数据结构之(二叉排序树)
- 数据结构学习之二叉排序树
- 数据结构之二叉排序树
- 数据结构之二叉排序树
- 数据结构之二叉排序树
- 数据结构之二叉排序树
- 数据结构之二叉排序树
- JAVA数据结构之二叉排序树
- 数据结构之二叉排序树
- JavaScript数据结构之 二叉排序树
- 数据结构之二叉排序树
- 数据结构之二叉排序树
- Python数据结构之二叉排序树
- 实用数据结构之二叉排序树小结
- 数据结构——查找之二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 函数参数默认值设置
- 理解JAVASCRIPT 中hasOwnProperty()的作用
- 阿里云工程师用机器学习破解雾霾成因
- MyBatis学习四 懒加载和缓存
- L2-011. 玩转二叉树
- 数据结构之二叉排序树
- MaxCompute(原ODPS) MapReduce常见问题解答
- hadoop第二天
- RecyclerView中item布局的"match_parent"属性失效--LayoutInflate的深入了解
- Qt之GUI学习笔记(四)——创建对话框
- px与dp与sp之间的转换
- vue组件最佳实践
- JNI交叉编译_NDK插件
- androidStudio升级到2.3之后新建Activity布局变成了约束(ConstraintLayout)布局