| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | /** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */type maxHeap []intfunc (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}
 |