题目描述
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
分析
可以用二叉树的中序遍历解这道题,由于中序遍历顺序刚好是左-根-右,因此只要中序遍历的结果是升序的,就是二叉搜索树,否则不是二叉搜索树。
js代码
/**
* 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 = inorderTraversal(root);
for(var i = 0; i < arr.length - 1; i++) {
if(arr[i + 1] <= arr[i]) {
return false;
}
}
return true;
};
function inorderTraversal(root) {
var arr = [];
midTra(root, arr);
return arr;
};
function midTra(root, arr) {
if(root) {
midTra(root.left, arr);
arr.push(root.val);
midTra(root.right, arr);
}
}