Skip to content

Commit df51f66

Browse files
authored
Create 0662-maximum-width-of-binary-tree.kt
1 parent b6dc3f2 commit df51f66

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

Diff for: kotlin/0662-maximum-width-of-binary-tree.kt

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/**
2+
* Example:
3+
* var ti = TreeNode(5)
4+
* var v = ti.`val`
5+
* Definition for a binary tree node.
6+
* class TreeNode(var `val`: Int) {
7+
* var left: TreeNode? = null
8+
* var right: TreeNode? = null
9+
* }
10+
*/
11+
12+
/*
13+
* BFS solution
14+
*/
15+
class Solution {
16+
fun widthOfBinaryTree(root: TreeNode?): Int {
17+
root?: return 0
18+
19+
val q = ArrayDeque<Triple<TreeNode?, Int, Int>>()
20+
21+
var res = 0
22+
var prevLevel = 0
23+
var prevNum = 1
24+
q.add(Triple(root, 1, 0))
25+
26+
while (q.isNotEmpty()) {
27+
val (node, num, level) = q.poll()
28+
29+
if (level > prevLevel) {
30+
prevLevel = level
31+
prevNum = num
32+
}
33+
34+
res = maxOf(res, num - prevNum + 1)
35+
36+
node?.left?.let {
37+
q.add(Triple(node.left, 2 * num, level + 1))
38+
}
39+
node?.right?.let {
40+
q.add(Triple(node.right, 2 * num + 1, level + 1))
41+
}
42+
}
43+
44+
return res
45+
}
46+
}
47+
48+
/*
49+
* DFS solution
50+
*/
51+
class Solution {
52+
fun widthOfBinaryTree(root: TreeNode?): Int {
53+
var width = 0
54+
val levelMap = HashMap<Int, Int>()
55+
56+
fun dfs(node: TreeNode?, depth: Int, pos: Int, levelMap: HashMap<Int, Int>) {
57+
node?: return
58+
if(!levelMap.contains(depth))
59+
levelMap[depth] = pos
60+
width = maxOf(width, (pos - levelMap[depth]!! + 1))
61+
dfs(node.left, depth+1, 2*pos, levelMap)
62+
dfs(node.right, depth+1, 2*pos+1, levelMap)
63+
}
64+
65+
dfs(root, 0, 0, levelMap)
66+
return width
67+
}
68+
69+
}

0 commit comments

Comments
 (0)