ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第38期:BST 的搜索(小白必看)

2021-01-27 23:07:02  阅读:160  来源: 互联网

标签:38 val BST 二叉 搜索 小白必 root 节点


我准备了 1000 本电子书和计算机各领域高清思维导图 100 张,关注后回复【资源】,即可获取!更可回复【内推】加入 BAT 内推群!
第38期:BST 的搜索(小白必看)

在上一节中,我们学习了二叉搜索树。那我们如何在二叉搜索树中查找一个元素呢?和普通的二叉树又有何不同?我们将在本节内容中进行学习!

下面我们仍然通过例题进行讲解。

01、题目分析


第700题:二叉搜索树中的搜索


给定二叉搜索树(BST)的根节点和一个值。你需要在 BST 中找到节点值等于给定值的节点。返回以该节点为根的子树。如果节点不存在,则返回 NULL 。


示例:

给定二叉搜索树:

        4
       / \
      2   7
     / \
    1   3

和值: 2

你应该返回如下子树:


      2     
     / \   
    1   3

在上述示例中,如果要找的值是 5 ,但因为没有节点值为 5 ,我们应该返回 NULL 。

本题为必须掌握! 需要非常熟悉

为后续题目打基础!

02、复习巩固


先复习一下,二叉搜索树(BST)的特性:

  • 若它的左子树不为空,则所有左子树上的值均小于其根节点的值
  • 若它的右子树不为空,则所有右子树上的值均大于其根节点得值
  • 它的左右子树也分别为二叉搜索树

如下图就是一棵典型的BST:

第38期:BST 的搜索(小白必看)

03、图解分析


假设目标值为 val,根据BST的特性,我们可以很容易想到查找过程

  • 如果val小于当前结点的值,转向其左子树继续搜索;
  • 如果val大于当前结点的值,转向其右子树继续搜索;
  • 如果已找到,则返回当前结点。

第38期:BST 的搜索(小白必看)

很简单,不是吗?

04、代码示例


给出递归和迭代两种解法:

//递归 
public TreeNode searchBST(TreeNode root, int val) { 
    if (root == null) 
        return null; 
    if (root.val > val) { 
        return searchBST(root.left, val);    
    } else if (root.val < val) {
        return searchBST(root.right, val);
    } else {
        return root;
    }
}
//迭代
public TreeNode searchBST(TreeNode root, int val) {
        while (root != null) {
            if (root.val == val) {
                return root;
            } else if (root.val > val) {
                root = root.left;
            } else {
                root = root.right;
            }
        }
        return null;
 }

递归与迭代的区别

递归:重复调用函数自身实现循环称为递归;

迭代:利用变量的原值推出新值称为迭代,或者说迭代是函数内某段代码实现循环;

特别说明

本题确实很简单!专门拉出来讲解的目的有二。第一BST确实很重要,第二希望通过重复,能加深大家对BST的印象,不至于和后面的内容出现交叉感染!

标签:38,val,BST,二叉,搜索,小白必,root,节点
来源: https://blog.51cto.com/15076236/2608524

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有