/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init() { self.val = 0; self.left = nil; self.right = nil; }
 *     public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
 *     public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
 *         self.val = val
 *         self.left = left
 *         self.right = right
 *     }
 * }
 */
class Solution {
    func tree2str(_ root: TreeNode?) -> String {
        if let root = root {
            let left = tree2str(root.left)
            let right = tree2str(root.right)

            var l = ""
            if left != "" || right != "" {
                l = "(\(left))"
            }

            var r = ""
            if right != "" {
                r = "(\(right))"
            }

            return "\(root.val)\(l)\(r)"
        }

        return ""
    }
}