【发布时间】:2020-06-16 22:49:58
【问题描述】:
我在 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;
}
为什么会这样?也许 NULL 表示法有问题,但我不确定。
【问题讨论】:
-
也许是因为它们是完全不同的语言?
-
在当前形式下,Java 代码甚至无法编译。右括号过多。
-
@user253751 - 不,他们不应该。 C++ 有不同的对象模型。忽略的翻译永远不会做同样的事情。
-
请提供minimal reproducible example并解释“它不能正常工作”的含义
-
Integer在 Java 中可以是null(因为这实际上只是一个指针)。 C++ 中的int不是指针。如果int是0并且您检查它是否是NULL,您会得到true。在 Java 中,Integer可以是null,它与0不同。