func (t *bt) topview() {
if t.root == nil {
return
}
qu := list.New()
topview := make(map[int]*tree)
qu.PushBack(top{t.root, 0})
//fmt.Println(sample.Value.(top).hd)
fmt.Println("top view")
for qu != nil {
sample := qu.Front()
qu.Remove(qu.Front())
for key := range topview {
if key != sample.Value.(top).hd {
topview[sample.Value.(top).hd] = sample.Value.(top).node
}
}
if sample.Value.(top).node.left != nil {
qu.PushBack(top{sample.Value.(top).node.left, sample.Value.(top).hd - 1})
}
if sample.Value.(top).node.right != nil {
qu.PushBack(top{sample.Value.(top).node.right, sample.Value.(top).hd + 1})
}
}
for _, value := range topview {
fmt.Println(value)
}
}
我得到的这个错误
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x109e1cf]
goroutine 1 [running]:
container/list.(*List).Remove(...)
/usr/local/go/src/container/list/list.go:140
main.(*bt).topview(0xc000072f60)
/Users/pulkitkundra/work/hackerrank/golang-30/tree.go:100 +0x32f
main.main()
/Users/pulkitkundra/work/hackerrank/golang-30/tree.go:126 +0x108
exit status 2
我试图将删除行放在延迟中,然后它被卡住了。如果我不删除元素,它就会进入无限循环。我正在尝试实现BST的顶视图代码。不寻求以其他方式创建队列。
慕仙森
繁星淼淼
相关分类