Given the root of a binary tree, determine if it is a valid binary search tree (BST).
A valid BST is defined as follows: The left subtree of a node contains only nodes with keys less than the node’s key. The right subtree of a node contains only nodes with keys greater than the node’s key. Both the left and right subtrees must also be binary search trees.
Example 1:
Input: root = [2,1,3] Output: true
Example 2:
Input: root = [5,1,4,null,null,3,6] Output: false Explanation: The root node’s value is 5 but its right child’s value is 4.
Constraints: The number of nodes in the tree is in the range [1, 104]. -231 <= Node.val <= 231 - 1
/** * @param {TreeNode} root * @return {boolean} */ var isValidBST = function (root) { if (root === null) returntrue; let stack = []; let cur = root; let pre = null; while (cur !== null || stack.length) { while (cur !== null) { stack.push(cur); cur = cur.left; } cur = stack.pop(); if (pre !== null && cur.val <= pre.val) { returnfalse; } pre = cur; cur = cur.right; } returntrue; };
递归
递归的代码就非常简单了,任何节点如果存在左孩子,左孩子的 val 不能大于其父节点;如果存在右孩子, 右孩子的 val 不能小于其父节点。