Solution 1: Recursively
func upsideDownBinaryTree(_ root: TreeNode?) -> TreeNode? {
if root == nil || root?.left == nil {
return root
}
let res = upsideDownBinaryTree(root?.left)
root?.left?.left = root?.right
root?.left?.right = root
root?.left = nil
root?.right = nil
return res
}
Solution 2: Iteratively
func upsideDownBinaryTree(_ root: TreeNode?) -> TreeNode? {
var current = root
var pre: TreeNode?
var next: TreeNode?
var tmp: TreeNode?
while current != nil {
next = current?.left
current?.left = tmp
tmp = current?.right
current?.right = pre
pre = current
current = next
}
return pre
}