- leetcode的原文链接
- 树的定义
C++版本
- 需要给每一个节点的数值划分范围
- 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 任意节点的左、右子树也分别为二叉查找树;
- 没有键值相等的节点。
bool isValidBST_children(TreeNode* root,long min_value,long max_value){if (root == nullptr){return true;}if (root->val >= max_value || root->val <= min_value){return false;}return isValidBST_children(root->left,min_value,root->val) &&isValidBST_children(root->right,root->val,max_value);}
bool isValidBST(TreeNode* root) {return isValidBST_children(root,INTMAX_MIN,INTMAX_MAX);
}中序遍历版本class Solution {
public:bool isValidBST(TreeNode* root) {stack<TreeNode*> stack;long long inorder = (long long)INT_MIN - 1;while (!stack.empty() || root != nullptr) {while (root != nullptr) {stack.push(root);root = root -> left;}root = stack.top();stack.pop();// 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树if (root -> val <= inorder) {return false;}inorder = root -> val;root = root -> right;}return true;}
};作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/validate-binary-search-tree/solution/yan-zheng-er-cha-sou-suo-shu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。