欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > LeetCode 解题思路 22(Hot 100)

LeetCode 解题思路 22(Hot 100)

2025/4/16 23:28:31 来源:https://blog.csdn.net/qq_45801780/article/details/146405679  浏览:    关键词:LeetCode 解题思路 22(Hot 100)

在这里插入图片描述

解题思路:

  1. 递归思路: 传入当前节点的最小值和最大值,递归判断左右子树。
  2. 结束条件: 当前节点为空或不满足二叉搜索树。

Java代码:

class Solution {public boolean isValidBST(TreeNode root) {return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);}public boolean isValidBST(TreeNode node, long lower, long upper) {if (node == null) return true;if (node.val <= lower || node.val >= upper) return false;return isValidBST(node.left, lower, node.val) && isValidBST(node.right, node.val, upper);}
}

复杂度分析:

  • 时间复杂度: O(n),其中 n 是二叉树的节点数。每个节点恰好被访问一次。
  • 空间复杂度: O(h),其中 h 是二叉树的高度。空间复杂度主要由递归调用栈的深度决定,最坏情况下(树退化为链表)为O(n),平衡树情况下为O(logn)。

在这里插入图片描述

解题思路:

  1. 中序遍历: 先递归遍历左子树,再处理当前节点,最后遍历右子树。
  2. 递减 k: 每次访问节点时,将 k 减 1。当 k 减至 0 时,当前节点即为第 k 小的元素。
  3. 提前终止: 一旦找到第 k 小的元素,后续递归调用会因 k == 0 直接返回,避免多余遍历。

Java代码:

class Solution {int result, k;private void dfs(TreeNode root) {if (root == null) return;dfs(root.left);if (--k == 0) result = root.val;dfs(root.right);}public int kthSmallest(TreeNode root, int k) {this.k = k;dfs(root);return result;}
}

复杂度分析:

  • 时间复杂度: O(k),最坏情况下需要访问前 k 个节点。
  • 空间复杂度: O(h),h 为树的高度。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词