验证二叉搜索树
Tips
题目
验证一棵树是否为二叉搜索树. 本题中 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
}