首页 > 其他 > 详细

力扣Leetcode 98. 验证二叉搜索树

时间:2020-05-05 15:42:25      阅读:57      评论:0      收藏:0      [点我收藏+]

验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

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

示例 1:

输入:
    2
   /   1   3
输出: true

示例 2:

输入:
    5
   /   1   4
     /     3   6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
     根节点的值为 5 ,但是其右子节点值为 4 。

解题思路 ??

一开始想的是递归分支 有点类似贪心思想 忽略了是左边整体都得小于根,右边整体都得大于根

while(root -> left && root -> right){
            if(root -> left < root) isValidBST(root -> left);
            else return false;
            if(root -> right > root) isValidBST(root -> right);
            else return false;
        }

改进后也是利用递归 利用根作为左边子树的上界,右边子树的下界递归

class Solution {
public:
    bool helper(TreeNode* root, long long lower, long long upper) {
      // lower作为下界 upper作为上界
        if (root == nullptr) return true; // 递归出口
      	// 此时不满足左小右大
        if (root -> val <= lower || root -> val >= upper) return false;
        // 满足时更改 根节点 及 左子树的上界 与 右子树的下界
      	return helper(root -> left, lower, root -> val) && helper(root -> right, root -> val, upper);
    }
    bool isValidBST(TreeNode* root) {
        return helper(root, LONG_MIN, LONG_MAX); // long_min long_max为相当小、大的值
    }
};

力扣Leetcode 98. 验证二叉搜索树

原文:https://www.cnblogs.com/coderzjz/p/12830666.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!