力扣日记12.19-【二叉树篇】二叉搜索树中的搜索

news2024/11/17 23:40:50

力扣日记:【二叉树篇】二叉搜索树中的搜索

日期:2023.12.19
参考:代码随想录、力扣

700. 二叉搜索树中的搜索

题目描述

难度:简单

给定二叉搜索树(BST)的根节点 root 和一个整数值 val。

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

示例 1:
在这里插入图片描述

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

示例 2:
在这里插入图片描述

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

提示:

  • 树中节点数在 [1, 5000] 范围内
  • 1 <= Node.val <= 10^7
  • root 是二叉搜索树
  • 1 <= val <= 10^7

题解

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
#define SOLUTION 3
public:
#if SOLUTION == 1
    // 没有利用 二叉搜索树 的特征
    TreeNode* searchBST(TreeNode* root, int val) {
        // 终止条件
        if (root == nullptr) return nullptr;
        // 中
        if (root->val == val)   return root;
        // 左
        TreeNode* left = searchBST(root->left, val);
        if (left != nullptr && left->val  == val)   return left; 
        // 右
        TreeNode* right = searchBST(root->right, val);
        if (right != nullptr && right->val == val)  return right;
        return nullptr;        
    }
#elif SOLUTION == 2
    // 利用 二叉搜索树 的特征
    /*
    二叉搜索树是一个有序树
    若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
    若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    它的左、右子树也分别为二叉排序树
    */
    TreeNode* searchBST(TreeNode* root, int val) {
        if (root == nullptr)    return nullptr;
        if (root->val == val)   return root;
        // 如果值比root->val大, 说明只有可能在右子树有
        else if (root->val < val) {
            // 只递归右子树
            TreeNode* right = searchBST(root->right, val);
            // 无论right是否为null, 都返回right
            return right;
        } else {
            // 否则,递归左子树
            TreeNode* left = searchBST(root->left, val);
            return left;
        }
    }
#elif SOLUTION == 3
    // 迭代法
    TreeNode* searchBST(TreeNode* root, int val) {
        // 模拟
        while (root != nullptr) {
            if (root->val == val)   return root;
            else if (root->val > val)   root = root->left; // 如果值大了,则往左边搜索
            else    root = root->right;  // 否则往右边
        }
        return root;
        
    }
#endif
};

复杂度

时间复杂度:
空间复杂度:

思路总结

  • 要注意二叉搜索树的特性:
    • 二叉搜索树是一个有序树
    • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
    • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    • 它的左、右子树也分别为二叉排序树
  • 因此在递归或者迭代时可以利用其特性,判断搜索方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1322849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微软在 Perforce Helix 核心服务器中发现4个安全漏洞

微软分析师在对Perforce Helix的游戏开发工作室产品进行安全审查时&#xff0c;发现为游戏、政府、军事和技术等部门广泛使用的源代码管理平台 Perforce Helix Core Server 存在四大漏洞&#xff0c;并于今年 8 月底向 Perforce 报告了这些漏洞&#xff0c;其中一个漏洞被评为严…

HarmonyOS应用开发实战—开箱即用的活动创建页面【ArkTS】【鸿蒙专栏-33】

一.HarmonyOS应用开发实战—开箱即用的个人主页页面【ArkTS】【鸿蒙专栏-32】 1.1 项目背景 HarmonyOS(鸿蒙操作系统)是华为公司推出的一种分布式操作系统。它被设计为一种全场景、全连接的操作系统,旨在实现在各种设备之间的无缝协同和共享,包括智能手机、平板电脑、智能…

MFC 窗口创建过程与消息处理

目录 钩子简介 代码编写 窗口创建过程分析 消息处理 钩子简介 介绍几个钩子函数&#xff0c;因为它们与窗口创建工程有关 安装钩子函数 HHOOK SetWindowsHookExA([in] int idHook,[in] HOOKPROC lpfn,[in] HINSTANCE hmod,[in] DWORD dwThreadId ); 参数说明…

Kafka 安装与部署

目录 Kafka 下载 &#xff08;1&#xff09;将 kafka_2.11-2.4.1.tgz 上传至 /opt/software/ &#xff08;2&#xff09;解压安装包至 /opt/module/ [huweihadoop101 ~]$ cd /opt/software/ [huweihadoop101 software]$ tar -zxvf kafka_2.11-2.4.1.tgz -C ../module/&#…

PB开发Windows服务方案

1、项目简介 ​ PB作为一门客户端开发语言&#xff0c;虽然官方并未提供标准的Windows服务开发方案&#xff0c;但使用PB开发Windows服务并非无法实现。自PB9开始&#xff0c;PB提供了PBNI接口&#xff0c;PB与C可以通过这个接口互相调用&#xff0c;而C可以开发Windows服务。…

Java智慧工地数字化云平台源码(SaaS模式)

智慧工地是智慧城市理念在建筑工程行业的具体体现&#xff0c;智慧工地解决方案是建立在高度信息化基础上一种支持人事物全面感知、施工技术全面智能、工作互通互联、信息协同共享、决策科学分析、风险智慧预控的新型信息化手段。围绕人、机、料、法、环等关键要素&#xff0c;…

【算法与数据结构】376、LeetCode摆动序列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题难点在于要考虑到不同序列的情况&#xff0c;具体来说要考虑一下几种特殊情况&#xff1a; 1、上…

python学习,2.简单的数据类型

1.了解数及运算 整数&#xff1a;1&#xff0c;2&#xff0c;3。 运算符&#xff1a;加减乘除&#xff0c;**(乘方) 浮点数&#xff1a;python将所有带小数点的数称为浮点数。 这一块和别的语言有些不一样&#xff0c; 像C&#xff0c;分为float&#xff0c;double&#x…

河南开放大学形成性考核 平时作业 统一参考资料

试卷代号&#xff1a;1288 现代管理原理 参考试题&#xff08;开卷&#xff09; 一、单项选择&#xff08;下列选项中只有一个答案是准确的&#xff0c;请将其序号填入括号中。每小题2分&#xff0c;共20分&#xff09; 1.“凡事预则立&#xff0c;不预则废”&#xff0c;说…

极简Windows本机下载安装启动zookeeper

1.下载zookeeper Apache Download Mirrors 注意&#xff01;&#xff01;&#xff01;&#xff1a;安装的路径不要用中文 2.生成zoo.cfg文件 复制zookeeper的conf目录下的zoo_simple.cfg文件&#xff0c;并重命名为zoo.cfg 修改zoo.cfg文件中的路径(data&#xff0c;log…

Navicat 16最新操作

Navicat 16最新操作 1 知识小课堂1.1 Navicat 161.2 其他数据库连接工具 2 下载和安装2.1 下载2.2 安装 1 知识小课堂 1.1 Navicat 16 Navicat 16是一款功能强大的数据库管理工具&#xff0c;可以创建多个连接&#xff0c;方便管理不同类型的数据库&#xff0c;包括MySQL、Ora…

如何利用研发效能度量工具分析代码评审的效率、质量与瓶颈?

代码评审&#xff08;Code Review&#xff09;是保障代码质量中一个非常重要的环节&#xff0c;也是保证项目交付质量的关键一环。代码评审的开展对于产品质量提升、工程素养提升、研发团队的技术分享交流&#xff0c;或是完善团队代码规范&#xff0c;都能起到重要的促进作用。…

​【EI会议征稿通知】第三届智能系统、通信与计算机网络国际学术会议(ISCCN 2024)

第三届智能系统、通信与计算机网络国际学术会议&#xff08;ISCCN 2024&#xff09; 2024 3rd International Conference on Intelligent Systems, Communications and Computer Networks 第三届智能系统、通信与计算机网络国际学术会议&#xff08;ISCCN 2024&#xff09;将…

期货股市联动(期股联动助推资本市场上扬)

期股联动——期货股市助推资本市场上扬 随着我国资本市场的不断发展&#xff0c;期货和股票这两个市场也在逐渐紧密地联系起来。期货和股票的相互作用是一种“期股联动”&#xff0c;它能够促进资本市场的上扬。 期货与股票市场 期货市场是一种标准化的场外交易市场&#xf…

OpenAI发布AGI安全风险框架!董事会可随时叫停GPT-5等模型发布,奥特曼也得乖乖听话

OpenAI 再次强调模型安全性&#xff01;AGI 安全团队 Preparedness 发布模型安全评估与监控框架&#xff01; 这两天关注 AI 圈新闻的小伙伴们可能也有发现&#xff0c;近期的 OpenAI 可谓进行了一系列动作反复强调模型的“安全性”。 前有 OpenAI 安全系统&#xff08;Safety…

HarmonyOS(十五)——状态管理之@Prop装饰器(父子单向同步)

上一篇文章我们认识了状态管理的State装饰器&#xff08;组件内状态&#xff09;&#xff0c;接下来我们学习另外一个状态管理装饰器Prop装饰器。 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的&#xff0c;但是变化不会同步回其父组件。 说明&#…

可视化数据监控大屏网页界面,数据大屏模版PS资料(免费UI源文件)

数据大屏模板在大数据领域被广泛应用&#xff0c;其优势在于能够将复杂的数据通过图形、图表等方式呈现出来&#xff0c;使数据更易于理解。数据大屏模板可以用来进行数据分析。通过对数据的比较、趋势分析、异常检测等&#xff0c;可以发现数据中的规律和问题&#xff0c;为决…

SQL进阶理论篇(十):数据库中的锁

文章目录 简介按照锁的粒度进行划分从数据库管理的角度进行划分从程序员的角度进行划分为什么共享锁会发生死锁&#xff1f;参考文献 简介 索引和锁&#xff0c;是数据库中的两个核心知识点。 索引的相关知识点&#xff0c;在之前的几章里我们已经介绍的差不多了。接下来我们…

CEC2013(python):五种算法(HHO、WOA、GWO、DBO、PSO)求解CEC2013(python代码)

一、五种算法简介 1、哈里斯鹰优化算法HHO 2、鲸鱼优化算法WOA 3、灰狼优化算法GWO 4、蜣螂优化算法DBO 5、粒子群优化算法PSO 二、5种算法求解CEC2013 &#xff08;1&#xff09;CEC2013简介 参考文献&#xff1a; [1] Liang J J , Qu B Y , Suganthan P N , et al. P…

安卓开发学习---kotlin版---笔记(三)

网络 安卓主页的网络框架&#xff1a;OkHttp 在OkHttp的基础上进行封装的&#xff1a;Retrofit框架&#xff0c;更常使用 OkHttp学习 在使用网络请求的时候&#xff0c;先添加网络访问权限&#xff1a; <uses-permission android:name"android.permission.INTERNET&…