Recover Binary Search Tree (Leetcode 99)

Problem Link: https://leetcode.com/problems/recover-binary-search-tree/

class Solution:
    def recoverTree(self, root: Optional[TreeNode]) -> None:
        """
        Do not return anything, modify root in-place instead.
        """
        
        self.first=None
        self.middle=None
        self.last=None
        self.prev=TreeNode(float('-inf'))
        
        def inorder(root):
            if(root is None):
                return
            inorder(root.left)
            print(root.val)
            if(self.first is None):
                if(root.val<self.prev.val):
                    self.first=self.prev
                    self.middle=root
            else:
                if(root.val<self.prev.val):
                    self.last=root
            self.prev=root
            inorder(root.right)
            
        inorder(root)
        
        if(self.last is None):
            self.first.val,self.middle.val=self.middle.val,self.first.val
        else:
            self.first.val,self.last.val=self.last.val,self.first.val

Last updated