给定一个二叉树, 判断其是否是一个有效的二叉搜索树.
一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数.
节点的右子树只包含大于当前节点的数.
所有左子树和右子树自身必须也是二叉搜索树.
示例:
输入:
- 2
- / 1 3
输出: true
输入:
- 5
- / 1 4
- / 3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6].
根节点的值为 5 , 但是其右子节点值为 4
思路:
利用二叉搜索树的左子树完全小于根节点且右子树完全大于根节点的特性.
二叉搜索树在中序遍历下得到一个有序的数组, 然后遍历数组值是否依次递增.
实现:
- /**
- * Definition for a binary tree node.
- * function TreeNode(val) {
- * this.val = val;
- * this.left = this.right = null;
- * }
- */
- /**
- * @param {TreeNode} root
- * @return {boolean}
- */
- var isValidBST = function(root) {
- if(root == null){
- return true;
- }
- let nums = [];
- let isValid = true;
- // 中序遍历
- const inOrder = (node) => {
- if(node){
- inOrder(node.left);
- nums.push(node.val);
- inOrder(node.right);
- }
- }
- inOrder(root);
- // 校验是否有序
- for (let i = 1; i < nums.length; i++) {
- if (nums[i] <= nums[i - 1]) {
- isValid = false;
- }
- }
- return isValid;
- }
来源: http://www.bubuko.com/infodetail-2696658.html