- LeetCode之Print Binary Tree(Kotli
- LeetCode | 0655. 输出二叉树【Python】
- [刷题防痴呆] 0655 - 输出二叉树 (Print Bina
- LeetCode 156 Binary Tree Upside
- LeetCode 655. Print Binary Tree
- 【Leetcode】655. Print Binary Tree
- LeetCode - Univalued Binary Tree
- LeetCode 98 Validate Binary Sear
- LeetCode 110. Balanced Binary Tr
- LeetCode 102 Binary Tree Level O
问题:
![]()
方法:
其实主要就是两步,第一步是通过深度优先遍历所有的节点,第二步是根据遍历的位置,遍历的层级判断在数组中的位置,然后填充到数组中,最终输出数组即可。
class PrintBinaryTree {
class TreeNode(var `val`: Int) {
var left: TreeNode? = null
var right: TreeNode? = null
}
fun printTree(root: TreeNode?): List<List<String>> {
val depth = dfs(root)
val result = Array(depth) { Array(2.toDouble().pow(depth).toInt() - 1) { "" } }
print(result, root, 0, 0, (result[0].size - 1) / 2)
return result.map { it.toList() }
}
private fun print(result: Array<Array<String>>, root: TreeNode?, base: Int, level: Int, offset: Int) {
if (root == null) {
return
}
val new = base + offset
result[level][new] = root.`val`.toString()
print(result, root.left, new, level + 1, -((abs(new - base) - 1) / 2 + 1))
print(result, root.right, new, level + 1, (abs(new - base) - 1) / 2 + 1)
}
private fun dfs(root: TreeNode?): Int {
if (root == null) {
return 0
}
return max(dfs(root.left) + 1, dfs(root.right) + 1)
}
}
fun main() {
val root = PrintBinaryTree.TreeNode(1)
val left = PrintBinaryTree.TreeNode(2)
root.left = left
val right = PrintBinaryTree.TreeNode(5)
root.right = right
left.left = PrintBinaryTree.TreeNode(3)
left.left?.left = PrintBinaryTree.TreeNode(4)
val printBinaryTree = PrintBinaryTree()
val result = printBinaryTree.printTree(root)
}
有问题随时沟通
网友评论