Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater than the node's key.
- Both the left and right subtrees must also be binary search trees.
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / \ 2 3 / 4 \ 5The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}"
.
Tree Depth-first Search
注意到如果是二分查找树,前序遍历的结果是有序的。
class Solution {
public:
int last;
bool isValid;
bool begin;
bool isValidBST(TreeNode *root) {
if (root == NULL) return true;
isValid = true;
begin = true;
midtravel(root);
return isValid;
}
void midtravel(TreeNode * now) {
if (now->left != NULL) midtravel(now->left);
if (begin || last < now->val) {
last = now->val;
begin = false;
} else {
isValid = false;
return;
}
if (now->right != NULL) midtravel(now->right);
}
};