一、简介
如果左子树不为空,则左子树所有结点值都小于根结点的值。
如果右子树不为空,则右子树所有结点值都大于或等于根结点的值。
任意一棵子树也是一棵二叉搜索树。
二、特点
- 当你需要完成的功能是插入、删除、检索时,二叉搜索树具有极佳的性能
- 二叉搜索树在排序、检索、数据库管理系统及人工智能等方面广泛应用
- 二叉搜索树的中序遍历序列是一个递增的序列
三、二叉搜索树的建立
给定一个序列,对序列的每一个元素插入到二叉搜索树:
- 如果二叉搜索树为空,则该元素即为根结点
- 如二叉搜索树为非空,如该元素值小于根结点值,插入左子树,否则插入右子树
代码实现
public void insert(TreeNode root, int item) {
// 如果根结点为空,则元素为根结点
if (root == null) {
root= new TreeNode(item)
return;
} else if (item < root.val) { // 元素小于根结点值,插入左子树
insert(root.left, item);
} else {// 如果元素大于等于根结点值,插入右子树
insert(root.right, item);
}
}
四、二叉搜索树的查找
在二叉搜索树中查找给定值的元素
- 如果二叉搜索树为空,查找失败,返回空
- 如给定值与根结点比较,如相等则查找成功,若不相等
• 若给定值小于根结点,则在左子树中继续查找
• 若给定值大于等于根结点,在右子树中继续查找
代码实现
public boolean searchBST(TreeNode root, int value) {
// 递归终止条件 + 边界问题
if(root == null) { return false; }
boolean state = false;
// 如果查找值与当前结点相等,返回真
if(value == root.val) {state = true; }
// 如果查找值小于根结点值,在左子树中查找
if(value < root.val) { state = searchBST(root.left,value); }
// 如果查找值大于等于根结点值,在右子树中查找
if(value >= root.right) { state = searchBST(root.right,value); }
return state;
}