二叉查找树(Binary Search Tree)
支持动态数据集合的快速插入删除查找
要求?节点值:左<父<右
【二叉排序树】中序遍历二叉查找树可输出有序的数据序列,时间复杂度O(n)
时间复杂度与树的高度成正比O(height)
查找
从根节点开始依次比较要查找的数据和节点大小关系,直到相等则返回
public class BinarySearchTree {
private Node tree;
public Node find(int data) {
Node p = tree;
while (p != null) {
if (data < p.data) p = p.left;(根结点的值<查找数据则进入左子树递归查找)
else if (data > p.data) p = p.right;
else return p;
}
return null;
}
插入
类似查找,插入数据一般在叶子节点上
删除
- 删除的节点无子节点(直接将指向该节点的指针置为null)
- 删除的节点只有一个子节点(子承父位)
- 删除的节点有两个子节点(替换成右子树中的最小节点)
or 将要删除的节点特殊标记
支持重复数据
存储对象包含很多字段=键值(key)构建+卫星数据
把值相同的数据存储在同一节点
插入数据与节点值相同,则当作略大值处理放到节点的右子树;遇到值相同的节点不停止查找,在右子树中查找直到找到叶子节点