题目:
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.
题意:
判断一棵树是否是二叉搜索树。
思路:
二叉搜索树的跟节点比左边的子树的节点大,比右边的节点小。
思考二叉树的遍历,对于二查搜索树进行中序遍历的话,应该是一个递升的数列。
所以采用中序遍历,查看是否是一个顺序数列。不需要保存所有的数,只需要保存之前的数字,所以空间复杂度是O(1)。
代码如下:
class Solution {
public:
bool isValidBST(TreeNode* root) {
if(root == NULL)return true;
int num = INT_MIN;
bool first = true;
return InorderTravse(root,num,first);
}
bool InorderTravse(TreeNode *root, int& last_num,bool& first){
if(root == NULL)return true;
bool result = true;
result = InorderTravse(root->left,last_num,first);
if(!first){
if(last_num >= root->val)return false;
}
else first = false;
if(!result)return false;
last_num = root->val;
result = InorderTravse(root->right,last_num,first);
return result;
}
};