Advertisement
Alexxik

Untitled

Sep 17th, 2023 (edited)
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.42 KB | None | 0 0
  1. // MARK: - 101. Symmetric Tree
  2.  
  3. //        1
  4. //      /   \
  5. //     2     2
  6. //    / \   / \
  7. //   3   4 4   3
  8.  
  9. // сравнить надо 2 и 2 (как значения)
  10. // и запустить рекурсию на сравнение 3(left) и 3(right) и 4(right) и 4(left)
  11.  
  12. func isSymmetric(_ root: TreeNode?) -> Bool {
  13.    
  14.     func dfs(leftSub: TreeNode?, rightSub: TreeNode?) -> Bool {
  15.         // базовым случаем будет то, что и левый и правый nil - они симметричны
  16.         if leftSub == nil && rightSub == nil {
  17.             return true
  18.         }
  19.        
  20.         // Один из равен nil - не симметричны
  21.         if leftSub == nil || rightSub == nil {
  22.             return false
  23.         }
  24.        
  25.        
  26.         // Проверяем значения. Но не только они должны быть равны. Нужно еще сравнить поддеревья внешние и внутренние
  27.         // Возвращаем результат всех сравнений. Если хотя бы что-то вернуло false -> false
  28.         return (leftSub?.val == rightSub?.val
  29.                     &&  dfs(leftSub: leftSub?.left, rightSub: rightSub?.right)
  30.                         &&  dfs(leftSub: leftSub?.right, rightSub: rightSub?.left))
  31.     }
  32.    
  33.     return dfs(leftSub: root?.left, rightSub: root?.right)
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement