验证二叉树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
/** * 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} */ const isValidBST = (root) => { const valid = (root, l, r) => { if (!root) return true if (root.val <= l || root.val >= r) { return false } return valid(root.left, l, root.val) && valid(root.right, root.val, r) } return valid(root, -Infinity, Infinity) };
利用中序遍历比较
const isValidBST = (root) => { let min = -Infinity const stack = [] while (stack.length || root) { while (root) { stack.push(root) root = root.left } root = stack.pop() if (root.val <= min) { return false } min = root.val root = root.right } return true };
以自己现在的努力程度,还没有资格和别人拼天赋