| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | 
							- /**
 
-  * Definition for a binary tree node.
 
-  * type TreeNode struct {
 
-  *     Val int
 
-  *     Left *TreeNode
 
-  *     Right *TreeNode
 
-  * }
 
-  */
 
- type maxHeap []int
 
- func (h maxHeap) Len() int           { return len(h) }
 
- func (h maxHeap) Less(i, j int) bool { return h[j] < h[i] }
 
- func (h maxHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }
 
- func (h *maxHeap) Push(x interface{}) {
 
- 	*h = append(*h, x.(int))
 
- }
 
- func (h *maxHeap) Pop() interface{} {
 
- 	l := h.Len()
 
- 	x := (*h)[l-1]
 
- 	*h = (*h)[:l-1]
 
- 	return x
 
- }
 
- func constructMaximumBinaryTree(nums []int) *TreeNode {
 
- 	if len(nums) == 0 {
 
- 		return (*TreeNode)(nil)
 
- 	}
 
- 	m := make(map[int]int)
 
- 	var h maxHeap
 
- 	for i, v := range nums {
 
- 		m[v] = i
 
- 		heap.Push(&h, v)
 
- 	}
 
- 	root := TreeNode{heap.Pop(&h).(int), nil, nil}
 
- 	for h.Len() != 0 {
 
- 		curr := &root
 
- 		v := heap.Pop(&h).(int)
 
- 		i := m[v]
 
- 		for {
 
- 			j := m[curr.Val]
 
- 			if i < j {
 
- 				if curr.Left == nil {
 
- 					curr.Left = &TreeNode{v, nil, nil}
 
- 					break
 
- 				}
 
- 				curr = curr.Left
 
- 			} else {
 
- 				if curr.Right == nil {
 
- 					curr.Right = &TreeNode{v, nil, nil}
 
- 					break
 
- 				}
 
- 				curr = curr.Right
 
- 			}
 
- 		}
 
- 	}
 
- 	return &root
 
- }
 
 
  |