/**
 * Example:
 * var ti = TreeNode(5)
 * var v = ti.`val`
 * Definition for a binary tree node.
 * class TreeNode(var `val`: Int) {
 *     var left: TreeNode? = null
 *     var right: TreeNode? = null
 * }
 */
class Solution {
    fun tree2str(root: TreeNode?): String {
        if (root == null) {
            return ""
        }

        val value = root.`val`.toString()
        val left = "(${tree2str(root.left)})"
        val right = "(${tree2str(root.right)})"

        if (left == "()" && right == "()") {
            return value
        } else if (right == "()") {
            return "$value$left"
        }

        return "$value$left$right"
    }
}