概述
二叉搜索树(Binary Search Tree,BST),也称为二叉排序树或二叉查找树。
非空的二叉搜索树有如下性质:
- 非空左子树左子树上所有的节点的值都小于它的根节点的值。
- 非空左子树右子树上所有的节点的值均大于它的根节点的值。
- 左右子树均为二叉搜索树;
二分搜索树 递归实现
public void add(E e){
root = add(root,e);
}
/**
* 二分搜索树插入元素 递归实现
*/
private Node add(Node node ,E e){
if (node==null){
size++;
return new Node(e);
}
if (e.compareTo(node.data)<0){
node.left = add(node.left,e);
}else if (e.compareTo(node.data)>0){
node.right = add(node.right,e);
}
return node;
}
二分搜索树 查找递归实现
public boolean contains(E e){
return contains(root, e);
}
private boolean contains(Node node,E e){
if (node==null){
return false;
}if (e.compareTo(node.data)==0){
return true;
}else if(e.compareTo(node.data)<0){
return contains(node.left,e);
}else {
return contains(node.right,e);
}
}
二叉搜索树一定程度上可以提高搜索效率,但是当原序列有序时,例如序列 A = {1,2,3,4,5,6},构造二叉搜索树如图 1.1。依据此序列构造的二叉搜索树为右斜树,同时二叉树退化成单链表,搜索效率降低为 O(n)。
二叉搜索树的查找效率取决于树的高度,因此保持树的高度最小,即可保证树的查找效率。
概念
平衡二叉查找树:简称平衡二叉树。由前苏联的数学家 Adelse-Velskil 和 Landis 在 1962 年提出的高度平衡的二叉树,根据科学家的英文名也称为 AVL 树。它具有如下几个性质:
- 可以是空树。
- 假如不是空树,任何一个节点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过 1。