当前位置: 首页 > news >正文

代码随想录 700.二叉搜索树中的搜索

知识点:

1.二叉搜索树:二叉搜索树是一个有序树。

(1)如果它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值;

(2)如果它的右子树不为空,则右子树上所有节点的值均大于它的根节点的值;

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

(4)由前三条得,二叉搜索树的递归遍历、迭代遍历均与普通二叉树不一样。

2.因为二叉搜索树具有有序性。所以:

(1)二叉搜索树在递归过程中不需要回溯,因为节点的有序性已经帮助我们确定了搜索的方向。

(2)二叉搜索树可以不使用栈或队列直接写出迭代法。

题目要求:在二叉搜索树中搜索一个节点。

方法一:利用二叉搜索树的特点优化递归。

1.确定递归函数的参数和返回值:参数是传入的根节点和要搜索的整数值;返回值是以这个搜索数值所在的节点。

TreeNode searchBST(TreeNode root, int val)

2.确定终止条件:如果root为空,或者找到这个数值,就返回root节点。

        if (root == null || root.val == val) {return root;}

3.确定单层递归的逻辑:因为二叉搜索树的节点是有序的,所以可以有方向的去搜索。

(1)如果要找的节点值<根节点对应值,搜索左子树;

(2)如果要找的节点值>根节点对应值,搜索右子树;

(3)最后如果都没有搜索到,返回null。

        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;}if(val < root.val){return searchBST(root.left,val);}if(val > root.val){return searchBST(root.right,val);}return null;}
}

方法二:普通递归。

    class Solution {public TreeNode searchBST(TreeNode root, int val) {if(root == null || root.val == val){return root;}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) {while(root != null){if(val < root.val) root = root.left;else if(val > root.val) root = root.right;else return root;}return null;}
}

http://www.dtcms.com/a/529283.html

相关文章:

  • Vue3的自定义Hooks
  • Java的方法引用
  • 一个AVX的快速求向量余弦函数
  • 合肥优化网站哪家公司好网页打不开是什么问题
  • 去国外网站开发客户中的contact us 没有邮箱爱南宁app下载
  • MySQL 的各种关联查询(JOIN)
  • h5游戏免费下载:水果忍者
  • 有什么网站可以做微信支付宝支付宝视频模板免费制作
  • 基于单片机的智能厨房环境控制系统设计
  • 某公司网站建设策划书html中文美食网站模板
  • 多源bfs
  • ESP32使用笔记(基于IDF):小智AI项目ESP32二次开发指南
  • RT-Thread Nano版本在GD32F527I-EVAL评估板的移植
  • 网站的优势是什么意思杭州网站建设哪家快速上线
  • AI大模型:(二)6.2 YOLO模型训练实践及目标跟踪
  • 手机端网站关键词排名内衣网站建设推广
  • Python第三方库pip和conda指令无法下载某些库解决办法
  • 网站套餐表格模板怎么做蛋糕店的网站
  • 哪里建设网站最好用做图的兼职网站
  • 为歌手做的个人网站seo编辑培训
  • 学习从0开始使用内网穿透工具cpolar(个人记录、详细图解)
  • wordpress模板免费win7优化大师官网
  • Linux 文本处理“三剑客”:sed命令完全指南
  • Graph + Agents 融合架构:2025年七大创新路径
  • 临沂网站制作费用如何做自己公司网站
  • STM32H723ZGT6 ADC+DMA多通道-老是进入DMA中断错误函数且不进入adc回调函数总结
  • 成毅李一桐《天地剑心》今日开播 热血群像演绎东方英雄故事
  • Atlas 200I A2 加速模块-GPU适配
  • 石家庄职业技术学院教务网络管理系统三明网站优化
  • 【经典书籍】C++ Primer 第18章如何设计一个“好用、好看、好改”的函数精华讲解