【面试题精选】二叉搜索树详解

一、二叉搜索树的概念及特点

二叉搜索树(BLT):Binary Search Tree,又名二叉排序树,二叉查找树,是一种常见的二叉树类型。它是一棵空树或具有以下特点的二叉树:

  1. 若任意结点的左子树不为空,那么左子树的任意结点的值均小于当前节点的值。
  2. 若任意结点的右子树不为空,那么右子树的任意结点的值均大于当前节点的值。
  3. 它的左右子树也均为二叉搜索树。
  4. 中序遍历可以得到一个有序序列。

树的物理结构如下图所示:
在这里插入图片描述
二叉搜索树,顾名思义,是一种方便查找和插入的二叉树,它的查找和插入操作的时间复杂度均为 O(logn)。
我们给出二叉树结点(为了方便讲解,这里的树结点的key值均为Integer类型),代码如下:

public class TreeNode {
   
   
    Integer key;
    TreeNode leftChild;
    TreeNode rightChild;

    public TreeNode(Integer key, TreeNode leftChild, TreeNode rightChild) {
   
   
        this.key = key;
        this.leftChild = leftChild;
        this.rightChild = rightChild;
    }

    public TreeNode() {
   
   
    }
}

二、二叉搜索树的相关操作

介绍完二叉搜索树的概念及性质,再来看看二叉搜索树的相关操作。


1、二叉搜索树的查找

如果我们要在二叉搜索树中查找一个值为 value 的结点应该如何去做?此时我们就要充分利用到二叉搜索树的1,2两条特点。

基本思想:
拿 value 跟 根节点 root 比较,如果value小于 root,就从 root 的左子树查找,如果value大于 root 就从 root 的右子树查找。

从上面的思想我们就能看出这里要用到递归或者迭代(本文采用迭代),具体步骤我们在代码中讲解:

// 二叉搜索树的查找操作
    public TreeNode search(Integer key) {
   
   
        // 如果为一颗空树,则没有查询到,直接返回空
        if (root == null) {
   
   
            return null;
        }
        // 创建一个移动的指针
        TreeNode temp = root;
        // 遍历该二叉搜索树
        while (true) {
   
   
            // 如果查找的值小于当前指针位置的值,就移动到当前结点的左子树
            if (key < temp.key) {
   
   
                if (temp.leftChild != null) {
   
   
                    temp = temp.leftChild;
                // 如果左子树为空,查找失败,返回null
                } else {
   
   
                    return null;
                }
            // 如果查找的值大于当前指针位置的值,就移动到当前结点的右子树
            } else if (key > temp.key) {
   
   
                if (temp.rightChild != null) {
   
   
                    temp = temp.rightChild;
                // 如果右子树为空,查找失败,返回null
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值