Skip to main content

验证二叉搜索树

题目

验证一棵树是否为二叉搜索树. 本题中 BST 的特征如下:

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

输入:

  2
/ \
1 3

输出: true

题解

因为 BST 的中序遍历是有序的, 所以只要保证当前节点的值大于前一个节点的值即可. 因此可以先创建一个 preVal 节点初始为 null, 走中序遍历即可.

/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isValidBST = function (root) {
let result = true
let preVal = null

var inorder = function (node) {
if (node) {
inorder(node.left)

if (preVal !== null && node.val <= preVal) {
result = false
return
}
preVal = node.val

inorder(node.right)
}
}

inorder(root)
return result
}