ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode学习-第八天

2022-01-08 13:34:45  阅读:113  来源: 互联网

标签:return val 第八天 二叉 学习 搜索 TreeNode root LeetCode


文章目录

一、98. 验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/validate-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
public:
    bool searchBST(TreeNode *root, long long low, long long high){
        if (root == nullptr){
            return true;
        }
        if (root->val <= low || root->val >= high){
            return false;
        }
        return searchBST(root->left, low, root->val) && searchBST(root->right, root->val, high);
    }
    bool isValidBST(TreeNode* root) {
        //很明显也是一道递归题目
        return searchBST(root, LONG_MIN, LONG_MAX);
        
    }
};

二、653. 两数之和 IV - 输入 BST

要知道二叉搜索树的中序遍历是升序,将遍历输出存为数组
再使用首位两个指针队目标值进行搜索

class Solution {
public:
    bool findTarget(TreeNode* root, int k) {
        //这题和二叉搜索树有什么关系,关键应该是二叉搜索树的中序遍历是升序排列的
        vector<int> q;
        InOrder(root, q);
        int j = q.size() - 1;
        int i = 0;
        while (i < j){
            int sum = q[i] + q[j];
            if (sum == k){
                return true;
            }
            if (sum < k){
                i++;
            }
            else {
                j--;
            }
        }
        return false;
    }
    void InOrder(TreeNode* root, vector<int> &q){
        if (root == nullptr){
            return;
        }
        InOrder(root->left, q);
        q.push_back(root->val);
        InOrder(root->right, q);

    }
    
};

三、235. 二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
在这里插入图片描述

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        //因为二叉搜索树是左子树小于右子树,
       
        while(1){
            if (root->val < p->val && root->val < q->val){
                root = root->right;
            }
            if (root->val > p->val && root->val > q->val){
                root = root->left;
            }
            else{
            break;
            }
        }
        return root;
    }
};

标签:return,val,第八天,二叉,学习,搜索,TreeNode,root,LeetCode
来源: https://blog.csdn.net/qq_58054907/article/details/122378545

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有