15.二叉树基础下

二叉查找树(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)构建+卫星数据

  • 把值相同的数据存储在同一节点

  • 插入数据与节点值相同,则当作略大值处理放到节点的右子树;遇到值相同的节点不停止查找,在右子树中查找直到找到叶子节点

你可能感兴趣的:(15.二叉树基础下)