-
Notifications
You must be signed in to change notification settings - Fork 20
/
BinaryTreeLevelOrderTraversalII.kt
47 lines (43 loc) · 1.08 KB
/
BinaryTreeLevelOrderTraversalII.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
* Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
*
* For example:
* Given binary tree [3,9,20,null,null,15,7],
* 3
* / \
* 9 20
* / \
* 15 7
* return its bottom-up level order traversal as:
* [
* [15,7],
* [9,20],
* [3]
* ]
*
* Accepted.
*/
class BinaryTreeLevelOrderTraversalII {
fun levelOrderBottom(root: TreeNode?): List<List<Int>> {
val lists = mutableListOf<MutableList<Int>>()
helper(lists, root, 0)
lists.reverse()
return lists
}
private fun helper(res: MutableList<MutableList<Int>>, node: TreeNode?, height: Int) {
if (node == null) {
return
}
if (height >= res.size) {
res.add(mutableListOf())
}
res[height].add(node.`val`)
helper(res, node.left, height + 1)
helper(res, node.right, height + 1)
}
data class TreeNode(
var `val`: Int,
var left: TreeNode? = null,
var right: TreeNode? = null
)
}