Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Goroutine dan Saluran Boleh Membandingkan Nilai Dua Pokok Binari dalam Go dengan Cekap?

Bagaimanakah Goroutine dan Saluran Boleh Membandingkan Nilai Dua Pokok Binari dalam Go dengan Cekap?

Barbara Streisand
Lepaskan: 2024-12-15 18:10:18
asal
998 orang telah melayarinya

How Can Goroutines and Channels Efficiently Compare the Values of Two Binary Trees in Go?

Pokok Binari Setara dalam Go Tour

Latihan ini melibatkan penentuan sama ada dua pokok binari mengandungi nilai yang sama. Dalam pelaksanaan anda, anda betul-betul menggunakan gorout untuk melintasi kedua-dua pokok secara serentak dan menghantar nilainya ke saluran. Walau bagaimanapun, isu itu timbul apabila cuba memberi isyarat bahawa tiada lagi unsur yang tinggal di dalam pokok.

Mengelakkan Penutupan Pramatang

Menggunakan close(ch) pada Walk akan menjadi lebih awal. tutup saluran sebelum semua nilai dihantar, kerana rekursi akan keluar lebih awal. Sebaliknya, penyelesaian yang elegan melibatkan penggunaan penutupan:

func Walk(t *tree.Tree, ch chan int) {
    defer close(ch) // 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)
}
Salin selepas log masuk

Penutupan ini menangkap saluran ch dan memastikan ia hanya ditutup apabila tiada lagi nod untuk dilalui. Pernyataan tutup tangguh memastikan penutupan dijalankan selepas semua panggilan rekursif selesai.

Dengan pembetulan ini, fungsi Sama anda boleh menentukan kesetaraan dengan tepat dengan menerima nilai secara berulang daripada saluran dan membandingkannya.

Atas ialah kandungan terperinci Bagaimanakah Goroutine dan Saluran Boleh Membandingkan Nilai Dua Pokok Binari dalam Go dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan