JesseZhao1990/algorithm

验证二叉搜索树

JesseZhao1990 opened this issue · 0 comments

image

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
// 方法1: 先中序遍历得到一个数组。再判断这个数组是否是从小到大的顺序排列
// var isValidBST = function(root) {
//     var res = [];
//     leftTraverse(root,res);
//     var mark = true;
//     for(var i=0;i<res.length;i++){
//         if(res[i+1]<=res[i]){
//             mark = false;
//         }
//     }
//     console.log(res);
//     return mark;
// };


// function leftTraverse(root,res=[]){
//     if(root === null) return null;
//     leftTraverse(root.left,res);
//     res.push(root.val);
//     leftTraverse(root.right,res);
// }

// 方法2:递归进行,从根开始递归,如果node节点的值大于最大值或者小于最小值,那返回false。否则同时向左和向右递归,向左的最大值是node节点的值,向右的最小值是node节点的值。递归下去。
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isValidBST = function(root) {    
    return loop(root, Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
};

function loop(node,min,max){
    if(!node) return true;
    if(node.val<=min || node.val>= max) return false;
    return loop(node.left, min, node.val) && loop(node.right, node.val,max);
}

LeetCode原题地址:https://leetcode-cn.com/problems/validate-binary-search-tree/description/