dengxinyi 6 gadi atpakaļ
vecāks
revīzija
f4ed5448d0
1 mainītis faili ar 45 papildinājumiem un 0 dzēšanām
  1. 45 0
      medium/662.maximum-width-of-binary-tree.go

+ 45 - 0
medium/662.maximum-width-of-binary-tree.go

@@ -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
+}