Medium
Inorder Successor in BST — Python
Full explanation · Time O(h) · Space O(1)
# Time: O(h)
# Space: O(1)
class Solution(object):
def inorderSuccessor(self, root, p):
"""
:type root: TreeNode
:type p: TreeNode
:rtype: TreeNode
"""
# If it has right subtree.
if p and p.right:
p = p.right
while p.left:
p = p.left
return p
# Search from root.
successor = None
while root and root != p:
if root.val > p.val:
successor = root
root = root.left
else:
root = root.right
return successor