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);
        }
    };
    
  • 相关阅读:
    [NOI2012] 美食节
    [NOI2008] 志愿者招募
    P3834 【模板】可持久化线段树 2(主席树)
    P3919 【模板】可持久化线段树 1(可持久化数组)
    P4168 [Violet]蒲公英
    轻重链剖分
    沉舟侧畔千帆过 病树前头万木春
    P2119 魔法阵 (0.1s 虐杀过程)
    两行虐杀儒略历
    CSP2020 S-2 爆零(日)记 (已完结)
  • 原文地址:https://www.cnblogs.com/Wade-/p/14253030.html
Copyright © 2011-2022 走看看