题目大意:判断一棵树是否是二叉搜索树
分析:dfs。二叉搜索树需要满足一个结点的左子树中的所有点都比他小,右子树中的所有点都比他大,并且它的左右子树也分别都是二叉搜索树。所以递归就需要两步,一是一直找到根节点左子树中的最大(最右)节点,并且判断根与最右结点&&根的左子树是不是二叉搜索树;二是一直找到根节点右子树中的最小(最左)结点,并且判断根与最左结点&&根的右子树是不是二叉搜索树。
代码:转载自https://leetcode.com/problems/validate-binary-search-tree/discuss/138650/Simple-C++-recursive-solution-beats-99.55
class Solution {
public:
bool isValidBST(TreeNode* root) {
if (!root) return true;
bool left = true, right = true;
TreeNode* p;
if (root->left) {
p = root->left;
while (p->right)
p = p->right;
left = p->val < root->val && isValidBST(root->left);
}
if (root->right) {
p = root->right;
while (p->left)
p = p->left;
right = p->val > root->val && isValidBST(root->right);
}
return left && right;
}
};