Inorder Successor

https://leetcode.com/problems/inorder-successor-in-bst-ii/

这道题求解下一个比当前node值大的node,只有两种情况。

  1. 第一个比当前node大的parent (具体画画就知道了)当前node在向上找parent时很可能一直在parent的右子树里面,找到第一个它在左子树里的parent就是我们要找的parent

  2. 当前node的right subtree里面最小的那个node

class Solution(object):
    def inorderSuccessor(self, node):
        """
        :type node: Node
        :rtype: Node
        """
        v = node.val
        if node.right:
            node = node.right
            while node.left:
                node = node.left
            return node
        
        
        while node.parent and node.val <= v:
            node = node.parent
        if node.val <= v:
            return None
        return node

这是在有parent的情况下。如果没有parent就如如下情况。

这里我们每找到一个root root.val > p.val 我们都assume这是我们找到的最后一个比p大的父并用res记录它

另一个解法,leftMost解法 + prev

Last updated