思路: 递归遍历二叉树,左右子树交叉赋值。
树的定义
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
}
}
测试数据
let root: TreeNode = TreeNode(4)
let root1: TreeNode = TreeNode(2)
let root2: TreeNode = TreeNode(7)
root.left = root1
root.right = root2
let root3: TreeNode = TreeNode(1)
let root4: TreeNode = TreeNode(3)
root1.left = root3
root1.right = root4
let root5: TreeNode = TreeNode(6)
let root6: TreeNode = TreeNode(7)
root2.left = root5
root2.right = root6
print(self.mirrorTree(root) as Any)
调用部分
func mirrorTree(_ root: TreeNode?) -> TreeNode? {
if(root == nil)
{
return nil
}
let endRoot : TreeNode = TreeNode(root?.val ?? 0);
if root?.left != nil {
endRoot.right = self.mirrorTree(root?.left)
}
if (root?.right != nil)
{
endRoot.left = self.mirrorTree(root?.right)
}
return endRoot
}