180.二叉树:二叉搜索树(力扣)

代码解决

/**
 * 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 {
public:
    TreeNode* searchBST(TreeNode* root, int val) 
    {
        // 如果根节点为空或者根节点值等于目标值,则返回根节点
        if(root == nullptr || root->val == val) return root;

        // 定义一个指针用于存储查找结果,默认为nullptr
        TreeNode* node = nullptr;

        // 如果目标值小于根节点值,则在左子树中查找
        if(val < root->val)
        {
            node = searchBST(root->left, val);
        }
        // 如果目标值大于根节点值,则在右子树中查找
        else if(val > root->val)
        {
            node = searchBST(root->right, val);
        }
        
        return node;
    }
};

代码使用了递归的方法。主要思路是首先判断根节点是否为空或者根节点的值是否等于目标值,如果是,则返回根节点。如果目标值小于根节点的值,则在左子树中继续搜索;如果目标值大于根节点的值,则在右子树中继续搜索。

这里简要解释一下代码的工作流程:

  1. 首先判断根节点是否为空或者根节点的值是否等于目标值,如果是,则返回根节点。
  2. 定义一个指针 node 用于存储查找结果,默认为 nullptr
  3. 如果目标值小于根节点的值,则在左子树中继续搜索,即调用 searchBST(root->left, val)
  4. 如果目标值大于根节点的值,则在右子树中继续搜索,即调用 searchBST(root->right, val)
  5. 返回找到的节点或者 nullptr

这个算法的时间复杂度是 O(h),其中 h 是树的高度。在最坏的情况下,树是完全不平衡的,时间复杂度为 O(n),其中 n 是树中节点的数量。空间复杂度也是 O(h),因为需要存储递归调用的栈。

相关推荐

  1. 110:平衡

    2024-06-15 21:08:05       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-15 21:08:05       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-15 21:08:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-15 21:08:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-15 21:08:05       20 阅读

热门阅读

  1. 如何为微信小程序添加人脸识别和身份验证功能

    2024-06-15 21:08:05       8 阅读
  2. C++day4

    C++day4

    2024-06-15 21:08:05      7 阅读
  3. elasticsearch结构化搜索

    2024-06-15 21:08:05       9 阅读
  4. Windows环境下JDK安装及环境变量配置指南

    2024-06-15 21:08:05       10 阅读