题目连接:Leetcode 098 Validate Binary Search Tree
解题思路:每个结点要维护当前子树结点中的最小值,和最大值。然后如果左结点不为空,递归判定左子树,并且左子树中的最大值不能大于当前值。右子树同理,但是最小值不能小于当前值。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool validBST(TreeNode* root, int& minVal, int& maxVal) { minVal = maxVal = root->val; int tmpMinVal, tmpMaxVal; if (root->left != NULL) { bool left = validBST(root->left, tmpMinVal, tmpMaxVal); if (left == false || tmpMaxVal >= root->val) return false; minVal = min(minVal, tmpMinVal); } if (root->right != NULL) { bool right = validBST(root->right, tmpMinVal, tmpMaxVal); if (right == false || tmpMinVal <= root->val) return false; maxVal = max(maxVal, tmpMaxVal); } return true; } bool isValidBST(TreeNode* root) { if (root == NULL) return true; int minVal, maxVal; return validBST(root, minVal, maxVal); } };