你的代码结构已经非常接近正确的解法了,只需要做一些小的调整。下面是经过优化后的代码:
class Solution {
public:
long temp_value = LONG_MIN; // 使用 long 类型,避免溢出
bool isValid(TreeNode* node) {
if (!node) return true; // 如果节点为空,则有效
// 先检查左子树
if (!isValid(node->left)) return false;
// 检查当前节点值与上一个值的关系
if (temp_value >= node->val) return false;
temp_value = node->val; // 更新上一个访问的节点值
// 再检查右子树
return isValid(node->right);
}
bool isValidBST(TreeNode* root) {
return isValid(root);
}
};
修改要点:
- 类型选择:将
temp_value
的类型保持为long
而不是int
,这样可以确保在处理极端情况时不会发生整型溢出(例如,在树中有最大整数值时)。 - 逻辑清晰性:代码结构良好,采用递归的方法遍历左右子树并验证 BST 的条件。
这段代码实现了中序遍历,同时通过 temp_value
来保持最后访问的节点值,从而检查二叉搜索树的性质。这个方法的时间复杂度是 O(n),空间复杂度则取决于递归调用栈,最坏情况下为 O(h),其中 h 是树的高度。
内容由零声教学AI助手提供,问题来源于学员提问