Latihan Pergi Tour #7: Kesetaraan Pokok Binari
Latihan Pergi Tour "Pokok Binari" mencabar anda untuk menentukan sama ada dua pokok binari mengandungi nilai yang sama. Latihan ini memfokuskan pada menulis fungsi Walk rekursif yang melintasi pokok dan menghantar nilainya ke saluran.
Dalam kod yang anda berikan, anda menghadapi masalah menentukan apabila pokok telah dilalui sepenuhnya. Walaupun menutup saluran mungkin kelihatan intuitif, ia akan menamatkan traversal lebih awal kerana sifat rekursif fungsi Walk.
Satu penyelesaian kepada masalah ini ialah menggunakan penutupan. Dengan memanfaatkan versi berasaskan penutupan fungsi Walk, anda boleh menangguhkan penutupan saluran sehingga semua nilai telah dihantar. Kod yang diubah suai di bawah menunjukkan teknik ini:
func Walk(t *tree.Tree, ch chan int) { defer close(ch) // Automatically closes the channel when this function returns var walk func(t *tree.Tree) walk = func(t *tree.Tree) { if t == nil { return } walk(t.Left) ch <- t.Value walk(t.Right) } walk(t) }
Dengan pengubahsuaian ini, fungsi Walk menutup saluran secara automatik sebaik sahaja semua nilai telah dihantar, menandakan selesainya traversal. Ini membolehkan fungsi Sama membandingkan nilai daripada kedua-dua pokok dengan berkesan dengan menerimanya daripada saluran dan memastikan ia sama.
Atas ialah kandungan terperinci Bagaimana untuk Membandingkan Pokok Binari dengan Cekap dalam Go: Menyelesaikan Latihan Go Tour #7?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!