337 字
2 分钟
算法之验证二叉搜索树
98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。

解法:
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}