ZBLOG

class Solution { public: int temp_value = LONG_MIN; bool isValid(TreeNode* node) { if(!node) return true; if(!isValid(node->left)) return false; if(temp_value >= node->val) return false; temp_v...

你的代码结构已经非常接近正确的解法了,只需要做一些小的调整。下面是经过优化后的代码:

  1. class Solution {
  2. public:
  3. long temp_value = LONG_MIN; // 使用 long 类型,避免溢出
  4. bool isValid(TreeNode* node) {
  5. if (!node) return true; // 如果节点为空,则有效
  6. // 先检查左子树
  7. if (!isValid(node->left)) return false;
  8. // 检查当前节点值与上一个值的关系
  9. if (temp_value >= node->val) return false;
  10. temp_value = node->val; // 更新上一个访问的节点值
  11. // 再检查右子树
  12. return isValid(node->right);
  13. }
  14. bool isValidBST(TreeNode* root) {
  15. return isValid(root);
  16. }
  17. };

修改要点:

  1. 类型选择:将 temp_value 的类型保持为 long 而不是 int,这样可以确保在处理极端情况时不会发生整型溢出(例如,在树中有最大整数值时)。
  2. 逻辑清晰性:代码结构良好,采用递归的方法遍历左右子树并验证 BST 的条件。

这段代码实现了中序遍历,同时通过 temp_value 来保持最后访问的节点值,从而检查二叉搜索树的性质。这个方法的时间复杂度是 O(n),空间复杂度则取决于递归调用栈,最坏情况下为 O(h),其中 h 是树的高度。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22596

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?