一、相关概念
1.二叉搜索树
二叉搜索树(Binary Search Tree)又名二叉排序树、二叉查找树,
相比于普通二叉树,二叉搜索树的数据结构多一个双亲指针,其结构为:
public static class BSTnode<E>{
E data; //数据域
BSTnode<E> lchild; //左指针
BSTnode<E> rchild; //右指针
BSTnode<E> parent; //双亲指针
}
二叉搜索树有着如下特点:
设x是二叉搜索树的一个结点。若y是x左子树中的一个结点,有y.data <= x.data;若y是x右子树中的一个结点,有y.data >= x.data。
通俗来说就是:左子树任意节点值小于根结点,右子树任意节点值大于根结点。
二、相关操作方法与实现
1.查找
根据二叉搜索树的性质,很容易得到查找方法:与根结点比较,若相同,则找到了,返回根结点;若根结点为空,则不存在;若比根结点的值小,则往左子树找;若比根结点的值大,则往右子树找。
递归实现:
public BSTnode<E> search(BSTnode<E> node,E val){
if(node == null||val.equals(node.data)) //判断是否找到
return node;
if (val.compareTo(node.data) < 0) //小,查找左子树
return search(node.lchild, val);
else //大,查找右子树
return search(node.rchild, val);
}
非递归实现:
public BSTnode<E> iterativeSearch(BSTnode<E> node,E val){
while (node!=null&&!val.equals(node.data)){
//不空且没找到时循环
if(val.compareTo(node.data) < 0)
node = node.lchild; //小,查找左子树
else //大,查找右子树
node = node.rchild;
}
return node;
}