kt: add «1028. Recover a Tree From Preorder Traversal»
URL: https://leetcode.com/problems/recover-a-tree-from-preorder-traversal/ Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
parent
359ff970a5
commit
2c0920d14e
1 changed files with 37 additions and 0 deletions
37
kt/recover-a-tree-from-preorder-traversal.kt
Normal file
37
kt/recover-a-tree-from-preorder-traversal.kt
Normal file
|
@ -0,0 +1,37 @@
|
|||
class Solution {
|
||||
fun recoverFromPreorder(traversal: String): TreeNode? {
|
||||
val levels = mutableListOf<TreeNode>()
|
||||
|
||||
var index = 0
|
||||
while (index < traversal.length) {
|
||||
var depth = 0
|
||||
while (index < traversal.length && traversal[index] == '-') {
|
||||
++depth
|
||||
++index
|
||||
}
|
||||
|
||||
var value = 0
|
||||
while (index < traversal.length && traversal[index].isDigit()) {
|
||||
value = 10 * value + (traversal[index] - '0')
|
||||
++index
|
||||
}
|
||||
|
||||
val node = TreeNode(value)
|
||||
if (depth < levels.size) {
|
||||
levels[depth] = node
|
||||
} else {
|
||||
levels.add(node)
|
||||
}
|
||||
|
||||
if (depth > 0) {
|
||||
val parent = levels[depth - 1]
|
||||
when {
|
||||
parent.left == null -> parent.left = node
|
||||
else -> parent.right = node
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return levels[0]
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue