3 回答

TA貢獻1951條經驗 獲得超3個贊
如果Walk函數本身不遞歸,則可以使用close()。即步行將做:
func Walk(t *tree.Tree, ch chan int) {
walkRecurse(t, ch)
close(ch)
}
其中walkRecurse或多或少是您當前的Walk功能,但是在walkRecurse上遞歸。(或者您將Walk重寫為迭代式的-理所當然,這更加令人生厭)使用這種方法,您的Same()函數必須了解Channels已關閉,這是通過表單的channel接收完成的
k, ok1 := <-ch
g, ok2 := <-ch
當ok1和ok2彼此不同時,或者當兩者都不同時,采取適當的措施false
另一種方法(但可能不是本練習的精神)是計算樹中的節點數:
func Same(t1, t2 *tree.Tree) bool {
countT1 := countTreeNodes(t1)
countT2 := countTreeNodes(t2)
if countT1 != countT2 {
return false
}
ch1 := make(chan int)
ch2 := make(chan int)
go Walk(t1, ch1)
go Walk(t2, ch2)
for i := 0; i < countT1; i++ {
if <-ch1 != <-ch2 {
return false
}
}
return true
}
您必須實現countTreeNodes()函數,該函數應該計算* Tree中的節點數
- 3 回答
- 0 關注
- 233 瀏覽
添加回答
舉報