Validate Binary Search Tree 1 2 3 4 5 6 7 8 9 10 11 12 class  Solution      func  isValidBST (_  root : TreeNode ?)Bool  {         return  helper(root, Int .min, Int .max)     }     private  func  helper (_  node : TreeNode ?, _  lower : Int , _  upper : Int )Bool  {         guard  let  n =  node else  { return  true  }         if  n.val <=  lower ||  n.val >=  upper { return  false  }         return  helper(n.left, lower, n.val) &&  helper(n.right, n.val, upper)     } } 
Binary Search Tree Iterator 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class  BSTIterator      private  var  queue =  [Int ]()     private  func  helper (_  root : TreeNode ?)         guard  let  root =  root else  { return  }         helper(root.left)         queue.append(root.val)         helper(root.right)     }     init (_  root : TreeNode ?)         helper(root)     }     func  next ()Int  {         return  queue.removeFirst()     }     func  hasNext ()Bool  {         return  ! queue.isEmpty     } } 
Search in a Binary Search Tree 1 2 3 4 5 6 7 8 9 10 11 class  Solution      func  searchBST (_  root : TreeNode ?, _  val : Int )TreeNode ? {         guard  let  root =  root else  { return  nil  }         if  root.val ==  val { return  root }         if  val <  root.val {             return  searchBST(root.left, val)         } else  {             return  searchBST(root.right, val)         }     } } 
Insert into a Binary Search Tree 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class  Solution      func  insertIntoBST (_  root : TreeNode ?, _  val : Int )TreeNode ? {         func  insert (_  root : TreeNode ? =  root, _  val : Int  =  val)             guard  let  root =  root else  { return  }             if  val <  root.val {                 if  let  l =  root.left {                     insert(l, val)                 } else  {                     root.left =  TreeNode (val)                 }             } else  {                 if  let  r =  root.right {                     insert(r, val)                 } else  {                     root.right =  TreeNode (val)                 }             }         }         insert()         return  root ??  TreeNode (val)     } } 
Delete Node in a Binary Search Tree 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class  Solution      func  deleteNode (_  root : TreeNode ?, _  key : Int )TreeNode ? {         guard  let  root =  root else  { return  nil  }         if  root.val ==  key {             if  root.left !=  nil  &&  root.right !=  nil  {                 var  p =  root.right                 while  p? .left !=  nil  {  p =  p? .left }                 p? .left =  root.left                 return  root.right             } else   {                 return  root.left !=  nil  ?  root.left : root.right             }         } else  if  key <  root.val {             root.left =  deleteNode(root.left, key)         } else  {             root.right =  deleteNode(root.right, key)         }         return  root     } } 
Kth Largest Element in a Stream 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class  KthLargest      var  arr =  [Int ]()     var  k =  0      init (_  k : Int , _  nums : [Int ])         self .k =  k         for  i in  nums { add(i) }     }     func  add (_  val : Int )Int  {         if  arr.count <  k ||  val >  arr.first!  {             var  i =  0              while  i <  arr.count, val >  arr[i] {                 i +=  1              }             arr.insert(val, at: i)             if  arr.count >  k {                 arr.removeFirst()             }         }         return  arr.first!      } } 
Lowest Common Ancestor of a Binary Search Tree 1 2 3 4 5 6 7 class  Solution      func  lowestCommonAncestor (_  root : TreeNode ?, _  p : TreeNode ?, _  q : TreeNode ?)TreeNode ? {         guard  let  root =  root, let  pv =  p? .val, let  qv =  q? .val else  { return  nil  }         if  root.val >=  min (pv, qv) &&  root.val <=  max (pv, qv) { return  root }         return  root.val >  max (pv, qv) ?  lowestCommonAncestor(root.left, p, q) : lowestCommonAncestor(root.right, p, q)     } } 
Contains Duplicate III Balanced Binary Tree 1 2 3 4 5 6 7 8 9 10 11 class  Solution      func  isBalanced (_  root : TreeNode ?)Bool  {         return  helper(root).1      }     func  helper (_  root : TreeNode ?)Int , Bool ) {         guard  let  r =  root else  { return  (0 , true ) }         let  rl =  helper(r.left), rr =  helper(r.right)         return  (1  +  max (rl.0 , rr.0 ), rl.1  &&  rr.1  &&  abs (rl.0  -  rr.0 ) <=  1 )     } } 
Convert Sorted Array to Binary Search Tree 1 2 3 4 5 6 7 8 9 10 11 class  Solution      func  sortedArrayToBST (_  nums : [Int ])TreeNode ? {         if  nums.isEmpty { return  nil  }         let  n =  nums.count, h =  n/ 2 , h1 =  h+ 1          let  r =  TreeNode (nums[n/ 2 ])         r.left =  sortedArrayToBST(Array (nums[0 ..< h]))         r.right =  sortedArrayToBST(Array (nums[h1... ]))         return  r     } } 
Translated by gpt-3.5-turbo