对于给定的二叉树[5,4,6,null,null,3,7],以下是出现问题的部分:
if (root->left) {
if (root->left->val >= root->val) {
ValidBST = false;
return;
}
}
if (root->right) {
if (root->right->val <= root->val) {
ValidBST = false;
return;
}
}
这段代码的逻辑判断有误。在验证一个二叉搜索树时,对于每个节点,需要确保其左子树中的所有节点都小于它,并且右子树中的所有节点都大于它。
然而,在上述代码中,只考虑了直接相邻的左右子节点与当前节点之间的大小关系。对于整棵子树来说,这并不足够。
正确地验证一个二叉搜索树需要使用递归方法进行深度优先遍历,并传递边界值来确保每个子树中的节点满足条件。
下面是修正后的示例代码:
class Solution {
public:
bool isValidBST(TreeNode* root) {
return validate(root, nullptr, nullptr);
}
private:
bool validate(TreeNode* node, TreeNode* minNode, TreeNode* maxNode) {
if (!node)
return true;
if ((minNode && node->val <= minNode->val) || (maxNode && node->val >= maxNode->val))
return false;
return validate(node->left, minNode, node) && validate(node->right, node, maxNode);
}
};
这样,对于给定的二叉树[5,4,6,null,null,3,7],isValidBST() 函数将返回 false,正确地指出了该二叉树不是有效的二叉搜索树。
内容由零声教学AI助手提供,问题来源于学员提问




