問題: You need to construct a string consists of parenthesis and integers from a binary tree with the preorder traversing way.node
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.git
方法: 經過遞歸實現先根遍歷,也能夠用棧結構實現。而後根據題目的要求當左節點存在但右節點爲空時省略右節點的(),左右節點都爲空時省略全部括號,其餘狀況均保留括號。github
具體實現:bash
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")
}
複製代碼
有問題隨時溝通app