热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode700:二叉搜索树中的搜索算法解析

本文详细介绍了LeetCode第700题——二叉搜索树中的搜索问题,包括问题描述、解决方案及C语言代码实现。

问题描述

给定一个二叉搜索树(Binary Search Tree)和一个目标值,编写一个函数来查找该目标值对应的节点。如果树中存在该目标值,则返回对应的节点;否则返回空。


解决方案

二叉搜索树的特点是左子树的所有节点值小于根节点值,右子树的所有节点值大于根节点值。基于这一特性,我们可以通过递归或迭代的方式进行搜索。本文采用迭代方法,使用队列来辅助遍历树结构。


代码实现

/**
* 定义二叉树节点结构
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
#define MAX_SIZE 5000
struct TreeNode* searchBST(struct TreeNode* root, int targetVal)
{
if (!root) return NULL; // 如果根节点为空,直接返回NULL
struct TreeNode* queue[MAX_SIZE]; // 定义队列用于存储待处理的节点
int frOnt= -1, rear = -1; // 初始化队列的前指针和后指针
queue[++rear] = root; // 将根节点入队
while (front struct TreeNode* currentNode = queue[++front]; // 取出队首元素
if (currentNode->val == targetVal) { // 如果当前节点值等于目标值,返回当前节点
return currentNode;
}
if (currentNode->left) { // 如果当前节点有左子节点,将左子节点入队
queue[++rear] = currentNode->left;
}
if (currentNode->right) { // 如果当前节点有右子节点,将右子节点入队
queue[++rear] = currentNode->right;
}
}
return NULL; // 遍历完整棵树未找到目标值,返回NULL
}

推荐阅读
  • 本文介绍如何使用Java实现AC自动机(Aho-Corasick算法),以实现高效的多模式字符串匹配。文章涵盖了Trie树和KMP算法的基础知识,并提供了一个详细的代码示例,包括构建Trie树、设置失败指针以及执行搜索的过程。 ... [详细]
  • 本人最近在学习python,在看了一些教程后,用python写了一个简单的云音乐播放器,下面把主要代码贴上来,其中用到了gi ... [详细]
  • 题目描述了一个n行m列的矩阵,矩阵中的每个元素代表一个石块。接下来会有q次操作,每次操作指定一个坐标(x, y),表示击碎该位置的石块。击碎后,需要检查周围的石块是否变得不稳定(即其左右或上下至少有一个方向上的相邻石块已被击碎)。如果某个石块变得不稳定,则应将其一并击碎。对于每次操作,需输出因此次操作而被击碎的石块总数。 ... [详细]
  • A题简单判断#includeusingnamespacestd;typedeflonglongll;intt;intmain(){cint;whil ... [详细]
  • 本文探讨了如何在Django中创建一个能够根据需求选择不同模板的包含标签。通过自定义逻辑,开发者可以在多个模板选项中灵活切换,以适应不同的显示需求。 ... [详细]
  • 本文介绍了一个使用C++编写的算法,用于从给定的字符串中找出最长的连续重复子串。例如,对于输入字符串“ababc”,算法将返回“ab”。文中不仅提供了详细的代码实现,还分析了算法的时间和空间复杂度。 ... [详细]
  • 题目描述:孩子们围坐在一起,分享水果,场面温馨。然而,由于孩子们身高不同,排队时显得高低不齐。给定孩子们的身高序列,通过交换某些孩子的顺序,计算每次交换后的序列混乱度。 ... [详细]
  • 一、数据更新操作DML语法中主要包括两个内容:查询与更新,更新主要包括:增加数据、修改数据、删除数据。其中这些操作是离不开查询的。1、增加数据语法:INSERTINTO表名称[(字 ... [详细]
  • 本文详细介绍了 KALDI 中 CUDA 矩阵库的使用与功能,包括其如何提高计算效率以及在不同环境下的适应性。 ... [详细]
  • 上一篇我们介绍了C#3.0新语言特性和改进上部分,这篇我们继续介绍剩下的部分。C#3.0新语言特性和改进包括:自动属性(Auto-ImplementedProperties)隐含 ... [详细]
  • 从零开始学重构——重构的流程及基础重构手法
    重构的流程重构手法  正如上一次所讲的那样,重构有两个基本条件,一是要保持代码在重构前后的行为基本不变,二是整个过程是受控且尽可能少地产生错误。尤其是对于第二点,产生了一系列的重构手 ... [详细]
  • 队列是限制在两端进行插入操作和删除操作的线性表,允许进行存入操作的一端称为“队尾”,允许进行删除操作的一端称为“队头”。当线性表中没有元素时࿰ ... [详细]
  • Android 5 及以上版本中使用存储访问框架(SAF)实现 SD 卡写入权限的方法
    本文探讨了在 Android 5 及更高版本中通过存储访问框架(Storage Access Framework, SAF)实现对 SD 卡文件的写入与重命名操作。文章分析了 SAF 的工作原理,并提供了一个示例应用的代码实现,展示了如何正确获取并使用用户授予的写入权限。 ... [详细]
  • https:leetcode-cn.comproblemscount-complete-tree-nodes递归的题目,左右中的后序遍历思想。***Definiti ... [详细]
  • 题目大意:给你一棵树,根节点为1有2种操作,第一种是给u节点所在的子树的所有节点的权值x第二种是询问,假设v是子树u中的节点 ... [详细]
author-avatar
徐恩爱2702937105
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有