LeetCode之Construct String from Binary Tree(Kotlin)

嘟囔發表於2019-01-01

問題: You need to construct a string consists of parenthesis and integers from a binary tree with the preorder traversing way.

The null node needs to be represented by empty parenthesis pair "()". And you need to omit all the empty parenthesis pairs that don't affect the one-to-one mapping relationship between the string and the original binary tree.


方法: 通過遞迴實現先根遍歷,也可以用棧結構實現。然後根據題目的要求當左節點存在但右節點為空時省略右節點的(),左右節點都為空時省略所有括號,其他情況均保留括號。

具體實現:

class ConstructStringFromBinaryTree {
    class TreeNode(var `val`: Int = 0) {
        var left: TreeNode? = null
        var right: TreeNode? = null
    }

    fun tree2str(t: TreeNode?): String {
        if (t == null) {
            return ""
        }
        val sb = StringBuilder()
        sb.append(t.`val`)
        if (t.left != null && t.right == null) {
            sb.append("(${tree2str(t.left)})")
        } else if (t.right != null) {
            sb.append("(${tree2str(t.left)})")
            sb.append("(${tree2str(t.right)})")
        }
        return sb.toString()
    }
}

fun main(args: Array<String>) {
    val root = ConstructStringFromBinaryTree.TreeNode(5)
    root.left = ConstructStringFromBinaryTree.TreeNode(3)
    root.right = ConstructStringFromBinaryTree.TreeNode(6)
    (root.left)?.left = ConstructStringFromBinaryTree.TreeNode(2)
    (root.left)?.right = ConstructStringFromBinaryTree.TreeNode(4)
    (root.right)?.right = ConstructStringFromBinaryTree.TreeNode(7)
    val constructStringFromBinaryTree = ConstructStringFromBinaryTree()
    val result = constructStringFromBinaryTree.tree2str(root)
    println("result $result")
}
複製程式碼

有問題隨時溝通

具體程式碼實現可以參考Github

相關文章