描述
中文English
给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
- 节点的左子树中的值要严格小于该节点的值。
- 节点的右子树中的值要严格大于该节点的值。
- 左右子树也必须是二叉查找树。
- 一个节点的树也是二叉查找树。
您在真实的面试中是否遇到过这个题? 是
题目纠错
样例
样例 1:
输入:{-1}
输出:true
解释:
二叉树如下(仅有一个节点):
-1
这是二叉查找树。
样例 2:
输入:{2,1,4,#,#,3,5}
输出:true
解释:
二叉树如下:
2
/ \
1 4
/ \
3 5
这是二叉查找树。
一直以为自己能马上A掉的题
居然还需要看题解才能写
之前的思路一直是更新后,再比较端点值,逻辑很乱
莫不如最开始初始化的最值就是真实的最值,每次更新
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: True if the binary tree is BST, or false
*/
bool dfs (TreeNode* root, int left, int right) {
if (root != NULL) {
if (root->val < left || root->val > right) {
return false;
}
return dfs(root->left, left, root->val-1) && dfs(root->right, root->val+1, right);
} else {
return true;
}
}
bool isValidBST(TreeNode * root) {
// write your code here
if (root)
return dfs(root, -2147483648, 2147483647);
return true;
}
};