首页 > 其他分享 >力扣700 二叉搜索树中的搜索

力扣700 二叉搜索树中的搜索

时间:2023-02-03 18:46:55浏览次数:41  
标签:return val root 力扣 搜索 searchBST null 树中 left

题目:

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

示例:

输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]

思路:

  二叉搜索树是一个有序树:

(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3)它的左、右子树也分别为二叉搜索树

  递归上,单层逻辑:

  二叉搜索树的节点是有序的,所以可以有方向的去搜索。如果root->val > val,搜索左子树,如果root->val < val,就搜索右子树,最后如果都没有搜索到,就返回NULL。

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
       if(root==null||root.val==val){
            return root;
        }
        if (val<root.val) {//利用搜索树的有序
            return searchBST(root.left, val);
        } else {
            return searchBST(root.right, val);
        }
    }
}

如果是搜索普通二叉树:

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
       if(root==null||root.val==val){
            return root;
        }
        //这里不用多此一举检查root.left!=null,空的话递归的时候就会返回null
        TreeNode left = searchBST(root.left, val);
        if (left != null) {
            return left;
        }
        return searchBST(root.right, val);
    }
}

 写题时候的错误:多次递归,超出时间限制

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
       if(root==null||root.val==val){
            return root;
        }
        //这里不用多此一举检查root.left!=null,空的话递归的时候就会返回null
        if (searchBST(root.left, val) != null) {//多次调用
            return searchBST(root.left, val);
        }
        return searchBST(root.right, val);
    }
}

 

标签:return,val,root,力扣,搜索,searchBST,null,树中,left
From: https://www.cnblogs.com/cjhtxdy/p/17090197.html

相关文章

  • WPF使用AvalonEdit实现代码高亮显示、搜索、替换功能
    WPF使用AvalonEdit实现代码高亮显示、搜索、替换功能很多工程软件拥有自己定义的脚本语言,作为程序员用惯了具有高亮显示和智能提示功能的编辑器,所以针对特定的脚本自己开......
  • BM34 判断是不是二叉搜索树
    思路:对于这种dfs思想的算法,分三步走:先判断空节点再判断左子树和右子树根据左子树和右子树返回的信息以及当前节点的信息,返回最终的结果这里有一个技巧:用一个全局变......
  • 【DFS】LeetCode 235. 二叉搜索树的最近公共祖先
    题目链接235.二叉搜索树的最近公共祖先思路与【DFS】LeetCode236.二叉树的最近公共祖先一模一样代码classSolution{publicTreeNodelowestCommonAncesto......
  • BST 二叉搜索树
    BST,又叫平衡二叉树,是一种循关键码访问的二叉树,每个节点带有一个数值就是关键码,并且要求保持顺序性,即任一节点不小于其左后代,不大于其右后代(注意是后代,不是孩子)。BST的顺序性......
  • 力扣1423. 可获得的最大点数
    几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点......
  • 力扣654 最大二叉树
    题目:给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子......
  • 力扣106 从中序与后序遍历序列构造二叉树
    题目:给定两个整数数组inorder和postorder,其中inorder是二叉树的中序遍历,postorder是同一棵树的后序遍历,请你构造并返回这颗二叉树。示例:输入:inorder=[9......
  • 《人工智能:线代方法》 第二部分问题求解 通过搜索进行问题求解(3)
    《人工智能:线代方法》第二部分问题求解通过搜索进行问题求解(3)3.5有信息(启发式)搜索策略3.5.1贪心最佳优先搜索3.5.2A*搜索3.5.3搜索......
  • 力扣49. 字母异位词分组
    给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只......
  • 二分查找-力扣(Java)
    题目描述给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。来源:力扣(LeetCode)链接......