leetcode 700. 二叉搜索树中的搜索 思考分析

目录

    • 题目
    • 1、不考虑BST性质,直接递归遍历
    • 2、回顾BST性质
    • 3、利用BST性质进行遍历
    • 4、简单的迭代方法

题目

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

1、不考虑BST性质,直接递归遍历

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
private:TreeNode* NewRoot = NULL;TreeNode* traversal(TreeNode* root, int val){if(root == NULL) return NewRoot ;if(root->val == val){NewRoot = root;return NewRoot;} traversal(root->left,val);traversal(root->right,val);return NewRoot;}
public:TreeNode* searchBST(TreeNode* root, int val) {return traversal(root,val);}
};

2、回顾BST性质

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

1、若它的左子树不空,则左子树上所有的结点的值均小于它的根结点的值
2、若它的右子树不空,则右子树上所有的结点的值均大于它的根结点的值
3、它的左右子树也分别为二叉搜索树

3、利用BST性质进行遍历

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {//打印信息// if(root == NULL) cout<<"NULL"<<endl;// else cout<<root->val<<endl;//if(root == NULL || root->val == val) return root;if(root->val > val) return searchBST(root->left,val);if(root->val < val) return searchBST(root->right,val);//如果没有找到就返回NULLreturn NULL;}
};

在这里插入图片描述
因为搜索到了目标结点,就要立即return了,这样才是找到了结点就返回,如果此时不return就会遍历整棵树

4、简单的迭代方法

由于BST的性质导致我们不需要用栈模拟深度或者队列模拟广度,甚至也不需要使用回溯的思想。因为树结点排列有序,你只要每到一个结点进行一次判断,就可以选择到正确的方向了。

class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {//打印信息// if(root == NULL) cout<<"NULL"<<endl;// else cout<<root->val<<endl;while(root!=NULL){//进行判断方向if(root->val > val) root=root->left;else if(root->val < val ) root=root->right;//如果不符合规则就返回根结点else return root;}//如果没有找到就返回NULLreturn NULL;}
};

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

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

相关文章

一、环境准备

一、前提已安装好anaconda 二、打开cmd命令窗口 conda activate激活base环境 conda create -n pytorch python3.6创建一个名称为pytorch的环境空间&#xff0c;其中使用的python版本为3.6 conda env list查看当前都有哪些环境 conda activate pytorch 激活刚安装的环境 pip l…

Java技能优化集锦

Java技能优化集锦 1 通用篇 “通用篇”讨论的问题适合于大多数Java应用。 1.1 不用new关键词创建类的实例 用new关键词创建类的实例时&#xff0c;构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口&#xff0c;我们可以调用它的clon…

java treemap_Java TreeMap size()方法与示例

java treemapTreeMap类的size()方法 (TreeMap Class size() method) size() method is available in java.util package. size()方法在java.util包中可用。 size() method is used to return the size of this TreeMap or in other words, we can say it returns the number of…

LeetCode 98. 验证二叉搜索树 思考分析

题目 给定一个二叉树&#xff0c;判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征&#xff1a; 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 1、利用BST性质&#xff1a;中序…

二、VC++环境的安装

一、打开PyCharm 在Terminal中激活pytorch环境&#xff0c;conda activate pytorch 安装pycocotools工具&#xff0c;pip install pycocotools 二、报错需安装VC 进入官网 安装完成之后重启电脑 三、再次安装pycocotools 打开Pycharm&#xff0c;安装pycocotools工具&am…

Android 网络状态的监控

1 http://www.cnblogs.com/qingblog/archive/2012/07/19/2598983.html 2 转载于:https://www.cnblogs.com/bavariama/p/3268450.html

深入浅出jQuery——jQuery历史

Dean Edwards编写的Packer&#xff1a;http://dean.edwards.name/packer/转载于:https://www.cnblogs.com/mingle/archive/2011/12/01/2271155.html

java enummap_Java EnumMap size()方法与示例

java enummapEnumMap类的size()方法 (EnumMap Class size() method) size() method is available in java.util package. size()方法在java.util包中可用。 size() method is used to return the size of this enum map (i.e. it returns the number of key-value pairs exists…

LeetCode 530. 二叉搜索树的最小绝对差 思考分析

目录题目思路1&#xff1a;递归遍历得到result数组(单调递增)&#xff0c;然后对数组进行前后差分&#xff0c;取最小值思路2&#xff1a;不用数组&#xff0c;进行优化思路3、回顾迭代法求解题目 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差…

一、线性回归

一、在有监督学习中主要包括两大类问题 分类问题&#xff1a;你去银行贷款借钱&#xff0c;人家银行会不会借给你&#xff1f;当然只有两种答案&#xff1a;会、不会 回归问题&#xff1a;人家银行能借给你多少钱&#xff1f;是一个具体的值 举个例子&#xff1a;假如你去银行…

8-18-Exercise

8-18-小练 A.HDU 1172 猜数字 采用枚举~【赤果果的暴力~】 代码&#xff1a; 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 using namespace std;5 6 int x[111],y[111],s,ss,vis[4],dis[4];7 char a[111][5];8 9 void find(int b,int …

【转】Windows下搭建object-c

Windows下搭建object-c 2011-07-15 22:18 272人阅读 评论(0) 收藏 举报 近打算针对iPhone、iPod touch和iPad开发一些应用&#xff0c;所以&#xff0c;需要开始学习Objective C&#xff08;苹果推出的类似C语言的开发语言&#xff09;。由于苹果的自我封闭的产业链发展模式&am…

java reader_Java Reader reset()方法与示例

java reader读取器类的reset()方法 (Reader Class reset() method) reset() method is available in java.io package. reset()方法在java.io包中可用。 reset() method is used to reset this stream to the mark set by mark() method most recently. reset()方法用于将此流重…

leetcode 501. 二叉搜索树中的众数 思考分析

目录题目1、不考虑BTS性质&#xff0c;直接寻找众数集合&#xff08;利用map&#xff09;2、考虑BTS的中序遍历结果性质题目 给定一个有相同值的二叉搜索树&#xff08;BST&#xff09;&#xff0c;找出 BST 中的所有众数&#xff08;出现频率最高的元素&#xff09;。 假定 BS…

二、模型评估方法

IDE为Jupyter Notebook scikit-learn官网 scikit-learn是一个专门用于机器学习的工具包 运用到啥函数不知道咋使用&#xff1f;戳它–>scikit-learn工具包的API文档 不知道用啥模板&#xff1f;戳它–>scikit-learn样例模型 功能翻译Classification分类Regression回归Cl…

union

关键字 1. 共用体声明和共用体变量定义共用体(参考“共用体”百科词条)是一种特殊形式的变量&#xff0c;使用关键字union来定义共用体(有些人也叫"联合")声明和共用体变量定义与结构体十分相似。其形式为:union 共用体名{数据类型 成员名;数据类型 成员名;...} 变量…

SEL

Object-C 中的Selector 概念 Andrew Huang <bluedrum163.com> 转载请注明作者和联络方式 在iphone程序中会大量看到selector这样的用法。<<iphone开发基础>花了很大一个篇幅来解析这个语法&#xff0c;但是不知 是翻译问题&#xff0c;还是解释过细&#xff0c…

Java Calendar add()方法与示例

日历类的add()方法 (Calendar Class add() method) add() method is available in java.util package. add()方法在java.util包中可用。 add() method is used to perform add or subtract the given amount of time to the given cal_fi (calendar field). add()方法用于对指定…

三、线性回归实验分析

所有代码块都是在Jupyter Notebook下进行调试运行&#xff0c;前后之间都相互关联。 文中所有代码块所涉及到的函数里面的详细参数均可通过scikit-learn官网API文档进行查阅&#xff0c;这里我只写下每行代码所实现的功能&#xff0c;参数的调整读者可以多进行试验调试。多动手…

leetcode 236. 二叉树的最近公共祖先 思考分析

目录题目思考分析改进本文章代码思路来源于公众号【代码随想录】题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、…