概述
二叉搜索树(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。
