Invert a binary tree.
Example:
Input:
4
/ \
2 7
/ \ / \
1 3 6 9
Output:
4
/ \
7 2
/ \ / \
9 6 3 1
O(n) Time, O(1) Space - Recursive:
/**
* Definition for a binary tree node.
* public class TreeNode {
* public var val: Int
* public var left: TreeNode?
* public var right: TreeNode?
* public init(_ val: Int) {
* self.val = val
* self.left = nil
* self.right = nil
* }
* }
*/
class Solution {
func invertTree(_ root: TreeNode?) -> TreeNode? {
guard let node = root else { return nil }
let left = invertTree(node.left), right = invertTree(node.right)
node.left = right
node.right = left
return node
}
}
O(n) Time, O(n/2) Space - Iterative:
/**
* Definition for a binary tree node.
* public class TreeNode {
* public var val: Int
* public var left: TreeNode?
* public var right: TreeNode?
* public init(_ val: Int) {
* self.val = val
* self.left = nil
* self.right = nil
* }
* }
*/
class Solution {
func invertTree(_ root: TreeNode?) -> TreeNode? {
guard let root = root else { return nil }
var queue = [root]
while !queue.isEmpty {
let curr = queue.removeLast(), right = curr.right
curr.right = curr.left
curr.left = right
if let left = curr.left {
queue.append(left)
}
if let right = curr.right {
queue.append(right)
}
}
return root
}
}