Ale*_*nko -2 c++ java algorithm tree
我在 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);}
Run Code Online (Sandbox Code Playgroud)
但是,当我在 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;
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?也许 NULL 表示法有问题,但我不确定。
在 C++ 中,NULL是“一个实现定义的空指针常量”,通常写成0. 0是在 C++ 中编写空指针的有效方法。它也恰好是一个有效值int。
在Java中,(Integer)0和null是不是一回事。
在 Java 中,lower != null检查是否没有下界。在 C++ 中,lower != NULL检查下限是否不为 0。如果您的树中有 0,您的 C++ 程序就会感到困惑,因为它认为树的那部分没有下限/上限。