java学习之二叉排序树

来源:互联网 发布:ubuntu ntfs 编辑:程序博客网 时间:2024/06/06 03:06
二叉排序树:
1.求最大值、最小值
方法:最小值是最左的节点,最大值是最右的节点,只需遍历寻找最左的节点和最右的节点即可
2查找:
查找关键字的值为key的元素,先从根节点开始,如果根节点为空,那么二叉树为空,没有查找到,否则,key和根节点值做比较,
如果小于根节点的值,那么就在左子树中查找,如果key等于根节点的值,那么查找成功,通知搜索,同样的,key大于根节点那么就在
右子树中查找
3插入算法
对数据集合元素x1,x2...xn
令x1是二叉树的根节点
若x2<x1 x2为x1的左子树的根节点,若x2>x1,那么x1为x2的右子树的根节点
4删除算法
(删除以后的二叉树仍是一颗二叉排序树)
假设要删除的节点指针是p,p的父亲节点的指针为f,会有四种情况
(1) p是叶子节点,那么直接删除节点p,f指向的p的指针域置空
(2)p只有左子树或者是只有右子树,(左右子树有一个为空) k是p的左子树,只需要将k的根节点和p的的父亲节点连接。设指针q指向p的一
个非空孩子节点
(3)p有两个孩子,
(1)可以用中序遍历序列的直接后继节点代替p,p的中序遍历序列的直接
后继一定是怕的右子树中最小的节点,即右子树的最左节点没有左子树
假设这个节点用指针s表示,将s放在p的位置然后删除节点s
(2)可以用中序遍历徐略的直接前驱节点代替p,p的中序遍历序列的直接
前驱一定是左子树中最大的节点,即左子树中左右节点没有右子树,假设
这个节点用指针s表示,将s放在p的位置,删除节点s
具体代码在GitHub:https://github.com/Strivema/BinSortTree
0 0
原创粉丝点击