337 字
2 分钟
算法之验证二叉搜索树

98. 验证二叉搜索树#

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

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

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

image-20210620141619034

解法:

1.递归

思路:

根据二叉搜索树的特性:

中序遍历的时候遍历的顺序是由小到大逐渐遍历的,也就是升序排列,

所以我们保存上一个值prev,与当前值current作比较。

如果当前值小于等于上一个值,那么这个树不是二叉搜索树。

/**
* 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 (node) {
var prev = -Infinity
function inorder(node) {
if (!node) {
return true
}
var preResult = inorder(node.left)
var inResult = node.val > prev
prev = node.val
var postResult = inorder(node.right)
return preResult && inResult && postResult
}
return inorder(node)
}

2.非递归(迭代)

var isValidBST = function (node) {
var stack = []
var prev = -Infinity
while(stack.length || node) {
while(node) {
stack.push(node)
node = node.left
}
node = stack.pop()
if (node.val <= prev) {
return false
}
prev = node.val
node = node.right
}
return true
}
算法之验证二叉搜索树
https://nollieleo.github.io/posts/算法之验证二叉搜索树/
作者
翁先森
发布于
2021-06-20
许可协议
CC BY-NC-SA 4.0