2 回答

TA貢獻1827條經驗 獲得超8個贊
緊急錯誤是由線路引起的
qu.Remove(qu.Front())
因為元素傳遞給了 qu。Remove()
是,發生這種情況是因為 qu.Front()
在列表為空時返回(即刪除所有元素后)nil
nil
循環條件
for qu != nil {
是錯誤的,因為它永遠不會被滿足,因為它永遠不會被滿足。qu
nil
循環應該“直到列表不為空”,即:
for qu.Len() > 0 {
這將防止返回,進而將其傳遞給并導致緊急錯誤。qu.Front()
nil
qu.Remove()

TA貢獻1775條經驗 獲得超11個贊
func (t *bt) topview() {
if t.root == nil {
return
}
qu := list.New()
topview := make(map[int]*tree)
qu.PushBack(top{t.root, 0})
topview[qu.Front().Value.(top).hd] = qu.Front().Value.(top).node
//fmt.Println(sample.Value.(top).hd)
fmt.Println("top view")
for qu.Len() > 0 {
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.data)
}
}
- 2 回答
- 0 關注
- 137 瀏覽
添加回答
舉報