zoukankan      html  css  js  c++  java
  • leetcode98.验证二叉树

    题目链接

    https://leetcode-cn.com/problems/validate-binary-search-tree/

    个人题解

    解法1

    思路

    根据二叉搜索树定义,左子树值均小于根,右子树值均大于根。由此便想到自下而上维护每个子树中最大最小值,确保树根左子树最大值小于根,右子树最小值大于根。

    代码

    class Solution {
        bool isValidBST0(TreeNode* root,int &maxv,int &minv) {
            if (root->left == nullptr && root->right == nullptr) {
                maxv = root->val;
                minv = root->val;
                return true;
            }
            int lmaxv,lminv,rmaxv,rminv;
            if(root->left && !isValidBST0(root->left,lmaxv,lminv))return false;
            if(root->right && !isValidBST0(root->right,rmaxv,rminv))return false;
            if(root->left && lmaxv >= root->val) return false;
            if(root->right && rminv <= root->val) return false;
            if(root->right)maxv = rmaxv;else maxv = root->val;
            if(root->left) minv = lminv;else minv = root->val;
            return true;
        }
    public:
        bool isValidBST(TreeNode* root) {
            int maxv,minv;
            return isValidBST0(root,maxv,minv);
        }
    };
    

    解法2:

    思路

    解法1思路的改进。
    左子树值均小于根,右子树值均大于根<=>根值是左子树上界,根值是右子树下界。
    对树自上而下递归判断,当每个子树保证界限时,为二叉搜索树。因为值均为int整数,完整树的界限为(INT_MIN,INT_MAX),开区间。

    代码

    class Solution {
        bool isValidBST1(TreeNode* root,long long minv,long long maxv) {
            if (root == nullptr){
                return true;
            }
            if(root->val<=minv||root->val >=maxv)return false;
            return isValidBST1(root->left,minv,root->val) && isValidBST1(root->right,root->val,maxv);
        }
    public:
        bool isValidBST(TreeNode* root) {
            return isValidBST1(root,-2147483649,2147483648);
        }
    };
    
  • 相关阅读:
    ATCoder code festival 2016 qual C
    2019.10.26模拟赛
    2019.10.24模拟赛
    狄利克雷卷积和莫比乌斯反演学习笔记
    ljq的互测の题解
    noi.ac #39
    noi.ac #741 code
    noi.ac #65 triangle
    让别人也可以访问你电脑上的ASP.NET MVC创建的网站
    ASP.NET MVC 开发中遇到的两个小问题
  • 原文地址:https://www.cnblogs.com/Wade-/p/14253030.html
Copyright © 2011-2022 走看看