95-验证二叉查找树
给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
- 节点的左子树中的值要严格小于该节点的值。
- 节点的右子树中的值要严格大于该节点的值。
- 左右子树也必须是二叉查找树。
- 一个节点的树也是二叉查找树。
样例
一个例子:
上述这棵二叉树序列化为 {2,1,4,#,#,3,5}.标签
分治法 二叉查找树 递归 二叉树
思路
方法一:中序遍历这棵树,用数组保存遍历结果,若数组严格递增,则可判定这棵树是一个二叉排序树
方法二:用prev指针记录父节点信息,遍历树,用二叉排序树的定义来判断
code
在这里给出方法二的实现代码
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: True if the binary tree is BST, or false
*/
bool isValidBST(TreeNode* root) {
TreeNode *pre = NULL;
return isValidBST(root, pre);
}
bool isValidBST(TreeNode *root, TreeNode *&pre) {
if (root == NULL) {
return true;
}
if (!isValidBST(root->left, pre)) {
return false;
}
if (pre != NULL && pre->val >= root->val) {
return false;
}
pre = root;
return isValidBST(root->right, pre);
}
};