Mashq: ekvivalent binar daraxtlar
Mashqning vazifalari quyidagilar.
Yechimni kodning pastki qismidagi
Topshiriqlarbo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.
Walk funksiyasini amalga oshiring.
Walk funksiyasini sinang.
tree.New(k) funksiyasi k, 2k, 3k, ..., 10k qiymatlarini saqlovchi tasodifiy tuzilishli (lekin doim saralangan) binar daraxt quradi.
Yangi ch channel'ini yarating va yurib chiquvchini (walker) ishga tushiring:
go Walk(tree.New(1), ch)
So'ng channel'dan 10 ta qiymat o'qing va chiqaring. Bu 1, 2, 3, ..., 10 sonlari bo'lishi kerak.
t1 va t2 bir xil qiymatlarni saqlashini aniqlash uchun Walk dan foydalanadigan Same funksiyasini amalga oshiring.
Same funksiyasini sinang.
Same(tree.New(1), tree.New(1)) true, Same(tree.New(1), tree.New(2)) esa false qaytarishi kerak.
Tree hujjatini shu yerda topish mumkin.
Izoh: asl sayohatda tree paketi tayyor beriladi. Bu yerda esa Tree va New funksiyasi kodning o'zida yozib qo'yilgan, shuning uchun qo'shimcha import kerak emas.
tree.New(k) o'rniga kodda tayyor New(k) bor. Testlar Walk New(1) daraxtidan 1, 2, ..., 10 ni tartib bilan yuborishini, Same(New(1), New(1)) — true, Same(New(1), New(2)) — false ekanini hamda tuzilishi turlicha, lekin qiymatlari bir xil daraxtlar uchun true qaytarishini tekshiradi. (Walk channel'ni yopmaydi — testning o'zi yopadi.)
Yigindi(t *Tree) int funksiyasini yozing: daraxtdagi barcha qiymatlar yig'indisini qaytarsin (nil daraxt uchun 0). Masalan, Yigindi(New(1)) — 55, Yigindi(New(2)) — 110.