LeetCode 99: Recover Binary Search Tree

Python Solution:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right

class Solution:
    
    #1. How to find 2 swapped numbers in an ascending array?
    #   1 2 3 4 5 -> swap 2, 5 -> 1 5 3 4 2
    #   Find swapped numbers when descending order appear
    
    #2. def inorder_traversal(node):
    #       inorder_traversal(node.left)
    #       value=node.val
    #       inorder_traversal(node.right)
    
    def recoverTree(self, root):        
        def inorder_traversal(node: TreeNode):
            nonlocal swapNode1,swapNode2,preNode
            if node is None:
                return
            
            inorder_traversal(node.left)
            if preNode and node.val < preNode.val:
                swapNode2 = node
                # find bigger swapped node
                if swapNode1 is None:
                    swapNode1 = preNode 
                # find smaller swapped node
                else:
                    return
            preNode = node
            inorder_traversal(node.right)
        
        swapNode1 = swapNode2 = preNode = None
        inorder_traversal(root)
        swapNode1.val, swapNode2.val = swapNode2.val, swapNode1.val
        
        #Time complexity: O(n)
        #Space complexity: O(n)
        

 

Time Complexity: O(n)

Space Complexity: O(n)


Feeling tired? You can also try our free online no-installation required casual games: Here Please consider to follow my youtube channel to support me: