关注
package main
import (
"container/heap"
"fmt"
)
type node struct {
val int
child []*node
}
type IntHeap []*node
func (h IntHeap) Len() int { return len(h) }
func (h IntHeap) Less(i, j int) bool { return h[i].val < h[j].val }
func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *IntHeap) Push(x any) {
*h = append(*h, x.(*node))
}
// Pop 要修改h的内容, 不用指针的花不会对原切片有改变
func (h *IntHeap) Pop() any {
old := *h
n := len(old)
x := old[n-1]
*h = old[:n-1]
return x
}
func main() {
h := &IntHeap{&node{1, nil}, &node{2, nil}, &node{3, nil}}
heap.Init(h)
for h.Len() >= 2 {
x := heap.Pop(h).(*node)
y := heap.Pop(h).(*node)
p := &node{val: x.val + y.val, child: []*node{x, y}}
heap.Push(h, p)
}
root := heap.Pop(h).(*node)
var dfs func(root *node)
dfs = func(root *node) {
if root.child == nil {
fmt.Print(root.val, " ")
return
}
dfs(root.child[0])
fmt.Print(root.val, " ")
dfs(root.child[1])
}
dfs(root)
}
查看原帖
点赞 评论
牛客热帖
更多
正在热议
更多
# xx岗简历求拷打 #
8894次浏览 105人参与
# 求职季如何保持心态不崩 #
212363次浏览 1459人参与
# 开工第一帖 #
29659次浏览 634人参与
# 面试反问你会问什么 #
168592次浏览 1738人参与
# 有转正机会的小厂实习值得去吗? #
8844次浏览 100人参与
# 你听到的“最没用”的秋招建议 #
51361次浏览 324人参与
# 工作不开心辞职是唯一出路吗 #
9608次浏览 40人参与
# 产品面经 #
263467次浏览 2177人参与
# 掌握什么AI技能,会为你的求职大大加分 #
7547次浏览 343人参与
# 你收到了团子的OC了吗 #
1532476次浏览 11825人参与
# 携程求职进展汇总 #
889213次浏览 5881人参与
# 远程面试的尴尬瞬间 #
328412次浏览 1917人参与
# 制造业的秋招小结 #
144820次浏览 2093人参与
# 拼多多求职进展汇总 #
848398次浏览 6593人参与
# 实习要如何选择和准备? #
145188次浏览 1566人参与
# 面试题刺客退退退 #
535298次浏览 7532人参与
# 非技术岗是怎么找实习的 #
295501次浏览 2594人参与
# 找工作时的取与舍 #
122919次浏览 878人参与
# 现在还是0offer,延毕还是备考 #
1299064次浏览 7929人参与
# 你最讨厌面试被问什么 #
8875次浏览 108人参与