700. 二叉搜索树中的搜索

  1. 二叉搜索树中的搜索
    已解答
    给定二叉搜索树(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 <= 107

root 是二叉搜索树

1 <= val <= 107

cpp 复制代码
#include <complex>
#include <iostream>
#include<iterator>
#include <vector>
#include <fstream>
#include <string>

using namespace std;


 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 {
 public:
     TreeNode* searchBST(TreeNode* root, int val) {
         if (root == nullptr)
             return nullptr; //如果根节点为空,返回空子树
         if (root->val == val) //如果根节点的值等于val,返回根节点
             return root;
        
         if (root->val > val) //如果根节点的值大于val
             //若它存在左节点,寻找它左边的子树里有没有符合条件的节点
             if (root->left)
                 return searchBST(root->left, val); //注意这里前面需要return
             else return nullptr;
         if (root->val < val) //如果根节点的值小于val
             //若它存在右节点,寻找它右边的子树里有没有符合条件的节点
             if (root->right)
                 return searchBST(root->right, val);
             else return nullptr;
        return nullptr; //最慢:遍历的节点是它的最大深度,最快,遍历的节点是它的最小深度
     }
 };

int main() //这里的自测主函数为模板,可以自己更换名字和值
{
    Solution solution;

    TreeNode nodes[7];

	nodes[0].val = 1;
    nodes[0].left = &nodes[1];
    nodes[0].right = &nodes[2];

    nodes[1].val = 2;
    nodes[1].left = &nodes[3];
    nodes[1].right = nullptr;

    nodes[2].val = 2;
    nodes[2].left = nullptr;
    nodes[2].right = &nodes[4];

    nodes[3].val = 3;
    nodes[3].left = &nodes[5];
    nodes[3].right = nullptr;

    nodes[4].val = 3;
    nodes[4].left = nullptr;
    nodes[4].right = &nodes[6];

    nodes[5].val = 4;
    nodes[5].left = nullptr;
    nodes[5].right = nullptr;

    nodes[6].val = 4;
    nodes[6].left = nullptr;
    nodes[6].right = nullptr;

    int x = solution.diameterOfBinaryTree(&nodes[0]);

    //vector<int> a = solution.inorderTraversal(nums);
}
相关推荐
m0_748240251 小时前
Windows编程+使用C++编写EXE加壳程序
开发语言·c++·windows
LoveXming3 小时前
Chapter14—中介者模式
c++·microsoft·设计模式·中介者模式·开闭原则
杨筱毅6 小时前
【C++】【常见面试题】最简版带大小和超时限制的LRU缓存实现
c++·面试
陌路207 小时前
C23构造函数与析构函数
开发语言·c++
_OP_CHEN7 小时前
C++进阶:(二)多态的深度解析
开发语言·c++·多态·抽象类·虚函数·多态的底层原理·多态面试题
金色熊族9 小时前
装饰器模式(c++版)
开发语言·c++·设计模式·装饰器模式
Dream it possible!9 小时前
LeetCode 面试经典 150_链表_旋转链表(64_61_C++_中等)
c++·leetcode·链表·面试
坚持编程的菜鸟11 小时前
LeetCode每日一题——Pow(x, n)
c语言·算法·leetcode
CS创新实验室12 小时前
典型算法题解:长度最小的子数组
数据结构·c++·算法·考研408
我有一些感想……12 小时前
浅谈 BSGS(Baby-Step Giant-Step 大步小步)算法
c++·算法·数论·离散对数·bsgs