每日一题做题记录,参考官方和三叶的题解 |
题目要求
思路:BST特性
- 按照BST左小右大的特性依次遍历查找:
- 当前节点小于等于目标,则向右边继续;
- 当前节点大于目标,则返回其左子树。
Java
class Solution {
public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
if(root == null)
return null;
if(root.val <= p.val)
return inorderSuccessor(root.right, p);
TreeNode res = inorderSuccessor(root.left, p);
return res == null ? root : res;
}
}
- 时间复杂度: O ( n ) O(n) O(n),与搜索深度有关,最坏情况为 O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
C++
class Solution {
public:
TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
if(root == nullptr)
return nullptr;
if(root->val <= p->val)
return inorderSuccessor(root->right, p);
TreeNode* res = inorderSuccessor(root->left, p);
return res == nullptr ? root : res;
}
};
- 时间复杂度: O ( n ) O(n) O(n),与搜索深度有关,最坏情况为 O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
总结
递归模拟题,还算简单,要注意小于等于的细节问题。
【这种结构体的题好像不能用Rust写哦】
欢迎指正与讨论! |