Advertisement
kosievdmerwe

Untitled

Nov 21st, 2021
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.37 KB | None | 0 0
  1. class Solution:
  2.     def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:
  3.         if not root:
  4.             return None
  5.        
  6.         if key < root.val:
  7.             root.left = self.deleteNode(root.left, key)
  8.             return root
  9.         elif key > root.val:
  10.             root.right = self.deleteNode(root.right, key)
  11.             return root
  12.            
  13.         return self.mergeTrees(root.left, root.right)
  14.        
  15.     def mergeTrees(
  16.         self,
  17.         left: Optional[TreeNode],
  18.         right: Optional[TreeNode],
  19.     ) -> Optional[TreeNode]:
  20.         if not left or not right:
  21.             return left or right
  22.        
  23.         if not left.right:
  24.             left.right = right
  25.             return left
  26.         if not right.left:
  27.             right.left = left
  28.             return right
  29.        
  30.         right, smallest_node = self.popSmallestNode(right)
  31.         smallest_node.left = left
  32.         smallest_node.right = right
  33.         return smallest_node
  34.    
  35.     def popSmallestNode(
  36.         self,
  37.         root: TreeNode,
  38.     ) -> Tuple[Optional[TreeNode], TreeNode]:
  39.         if not root.left:
  40.             rr = root.right
  41.             root.right = None
  42.             return (rr, root)
  43.        
  44.         new_left, smallest_node = self.popSmallestNode(root.left)
  45.         root.left = new_left
  46.         return (root, smallest_node)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement