验证二叉搜索树
JesseZhao1990 opened this issue · 0 comments
JesseZhao1990 commented
/**
* 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/
