Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memberi Isyarat Tamat Traversal dengan Benar dalam Latihan Kesetaraan Pokok Binari Go?

Bagaimanakah Saya Boleh Memberi Isyarat Tamat Traversal dengan Benar dalam Latihan Kesetaraan Pokok Binari Go?

Barbara Streisand
Barbara Streisandasal
2024-12-10 16:49:17577semak imbas

How Can I Properly Signal the End of Traversal in a Go Binary Tree Equivalence Exercise?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn