验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:
2
/ \
1 3
输出: true 示例 2:
解题思路
二叉搜索树一个明显的特点就是中序遍历以后是一个有序数组,所以可以通过判断中序遍历的结果是否是升序数组,来判断是否是二叉搜索树。
1.中序遍历树
2.判断是否是升序数组
/**
* 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) {
var arr = []
//递归中序遍历:左节点->中节点->右节点
function dfs(root){
if(!root){
return
}
root.left && dfs(root.left)
arr.push(root.val)
root.right && dfs(root.right)
}
dfs(root)
for(var i=0;i<arr.length;i++){
if(arr[i] >= arr[i+1]){
return false
}
}
return true
};