Я кодировал вопросы на LeetCode.com и столкнулся с проблемой при попытке решить проблему «Проверка дерева двоичного поиска». Код решения, написанный на Java, выглядит следующим образом:
public boolean helper(TreeNode node, Integer lower, Integer upper) {
if (node == null) return true;
}
int val = node.val;
if (lower != null && val <= lower) return false;
if (upper != null && val >= upper) return false;
if (! helper(node.right, val, upper)) return false;
if (! helper(node.left, lower, val)) return false;
return true;
}
public boolean isValidBST(TreeNode root) {
return helper(root, null, null);}
Однако, когда я реализую тот же алгоритм на C ++, он работает неправильно, например, в [0, null , -1] контрольный пример. Там есть код:
bool isValidBST(TreeNode* root) {
return checkSubtree(root, NULL, NULL);
}
bool checkSubtree(TreeNode* node, int lower, int upper) {
if (node == NULL) return true;
int val = node->val;
if (lower != NULL && val <= lower) return false;
if (upper != NULL && val >= upper) return false;
if (! checkSubtree(node->right, val, upper)) return false;
if (! checkSubtree(node->left, lower, val)) return false;
return true;
}
Почему это так? Возможно, что-то не так в нуль-нотации, но я не уверен.