|
@@ -0,0 +1,45 @@
|
|
|
+/**
|
|
|
+ * Definition for a binary tree node.
|
|
|
+ * type TreeNode struct {
|
|
|
+ * Val int
|
|
|
+ * Left *TreeNode
|
|
|
+ * Right *TreeNode
|
|
|
+ * }
|
|
|
+ */
|
|
|
+func widthOfBinaryTree(root *TreeNode) int {
|
|
|
+ m := make(map[int][]int)
|
|
|
+ helper(root, 0, 0, m)
|
|
|
+ max := 0
|
|
|
+ for _, v := range m {
|
|
|
+ max = maxInt(max, v[1]-v[0])
|
|
|
+ }
|
|
|
+ return max + 1
|
|
|
+}
|
|
|
+
|
|
|
+func helper(root *TreeNode, x, y int, m map[int][]int) {
|
|
|
+ if root == nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if v, ok := m[y]; ok {
|
|
|
+ v[0] = minInt(v[0], x)
|
|
|
+ v[1] = maxInt(v[1], x)
|
|
|
+ } else {
|
|
|
+ m[y] = []int{x, x}
|
|
|
+ }
|
|
|
+ helper(root.Left, x<<1, y+1, m)
|
|
|
+ helper(root.Right, (x<<1)|1, y+1, m)
|
|
|
+}
|
|
|
+
|
|
|
+func minInt(x, y int) int {
|
|
|
+ if x < y {
|
|
|
+ return x
|
|
|
+ }
|
|
|
+ return y
|
|
|
+}
|
|
|
+
|
|
|
+func maxInt(x, y int) int {
|
|
|
+ if x < y {
|
|
|
+ return y
|
|
|
+ }
|
|
|
+ return x
|
|
|
+}
|