Advertisement
Alexxik

Untitled

Mar 19th, 2024
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.29 KB | None | 0 0
  1. // Самый глубокий элемент в дереве
  2.  
  3. // 1 способ
  4. // Найти высоту данного дерева, а затем напечатать узел на самом нижнем уровне
  5.  
  6. func height(_ root: Node?) -> Int {
  7.     if root == nil {
  8.         return 0
  9.     }
  10.     return max(height(root!.left), height(root!.right)) + 1
  11. }
  12.  
  13. func execute(_ root: Node?) -> Int? {
  14.    
  15.     let levels = height(root)
  16.     var deepest: Int?
  17.    
  18.     func deepestNode(_ root: Node?, _ levels: Int) {
  19.         if root == nil {
  20.             return
  21.         }
  22.         if levels == 1 {
  23.             deepest = root!.value
  24.         } else if levels > 1 {
  25.             deepestNode(root!.left, levels - 1)
  26.             deepestNode(root!.right, levels - 1)
  27.         }
  28.     }
  29.     deepestNode(root, levels)
  30.     return deepest
  31. }
  32.  
  33.  
  34.  
  35. // 2 способ
  36.  
  37. func deepestNode(_ root: TreeNode?) -> Int {
  38.     guard let root = root else {
  39.         return 0
  40.     }
  41.    
  42.     var q = [TreeNode]()
  43.     q.append(root)
  44.     var node: TreeNode?
  45.    
  46.     while !q.isEmpty {
  47.         node = q.removeFirst()
  48.         if let left = node?.left {
  49.             q.append(left)
  50.         }
  51.         if let right = node?.right {
  52.             q.append(right)
  53.         }
  54.     }
  55.    
  56.     return node!.data
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement