原文:98. 验证二叉搜索树(leetcode 解题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-098/

题目:

难度:Middle

相关话题:深度优先搜索

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

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

  • 节点的左子树只包含小于 当前节点的数。

  • 节点的右子树只包含大于 当前节点的数。

  • 所有左子树和右子树自身必须也是二叉搜索树。

示例1:

输入:
    2
   / \
  1   3
输出: true

示例2:

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

思路:

方法一:

inorder遍历,检测是否是有序的;

方法二:

递归并且维护2个变量minmax,其中min表示当前root能接受的最小值,max表示当前root能接受的最大值;

如果出现root.val>=max || root.val<=min,返回false,否则继续递归处理,直到当前root不存在,返回true

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isValidBST = function(root) {
  function isValid(root,max,min){
    if(!root)return true
    if(root.val>=max || root.val<=min)return false
    return isValid(root.left,root.val,min) && isValid(root.right,max,root.val)
  }
  return isValid(root,Infinity,-Infinity)
};

扩展阅读: