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 关注
- 205 浏览
添加回答
举报