Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memberi Isyarat Tamat Traversal dengan Benar dalam Latihan Kesetaraan Pokok Binari Go?
Latihan Pergi Tour #7: Kesetaraan Pokok Binari
Apabila mencuba latihan kesetaraan pokok binari dalam lawatan Go, anda mungkin menghadapi cabaran dalam memberi isyarat apabila tiada lagi unsur yang tinggal di dalam pokok. Kod yang diberikan cuba menggunakan saluran untuk menyampaikan nilai daripada pokok, tetapi ia gagal menangani isu isyarat ini.
Masalahnya
Menutup saluran semasa rekursif traversal pramatang menamatkan penghantaran nilai. Menggunakan close(ch) dalam fungsi Walk() menutup saluran sebelum semua nilai dihantar.
Penyelesaian Menggunakan Penutupan
Penutupan membolehkan anda mencipta tanpa nama fungsi yang menangkap pembolehubah dari skop sekeliling. Ini boleh digunakan untuk menjana fungsi berjalan tersuai yang menutup saluran secara automatik apabila pelaksanaannya selesai.
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) }
Dalam penyelesaian ini, fungsi Walk() mengembalikan penutupan berjalan yang mengendalikan lintasan pokok . Apabila penutupan keluar, ia menutup saluran secara automatik, menunjukkan bahawa tiada lagi nilai untuk dihantar. Ini memastikan bahawa hujung penerima boleh menentukan apabila lintasan selesai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memberi Isyarat Tamat Traversal dengan Benar dalam Latihan Kesetaraan Pokok Binari Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!