Skip to main content

验证二叉搜索树

题目

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

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

输入:

  2
/ \
1 3

输出: true

题解

因为 BST 的中序遍历是有序的, 所以只要保证当前节点的值大于前一个节点的值即可. 因此可以先创建一个 prevNode 节点初始为 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) {
const arr = []
inOrderTraverse(root, arr)
return isAscending(arr)
}

const inOrderTraverse = (root, arr) => {
if (!root) return null

inOrderTraverse(root.left, arr)
arr.push(root.val)
inOrderTraverse(root.right, arr)
}

const isAscending = (arr) => {
const n = arr.length
for (let i = 0; i < n - 1; i++) {
if (arr[i] >= arr[i + 1]) return false
}

return true
}