- 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)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
?