U shbu bo'limda men misol sifatida ikkilik daraxtdan foydalanmoqchiman. Agar siz ilgari binar daraxtlar bilan ishlamagan bo'lsangiz, tashvishlanmang. Bizning maqsadlarimiz uchun asoslar:
Ikkilik daraxt - bu ma'lumotlar strukturasining bir turi.
Ikkilik daraxt tugunlardan iborat.
Tugun qiymatga ega va ikkitagacha tugunga ishora qilishi mumkin.
Tugun ikki turdan biri bo'lishi mumkin: barg tugunlari (uning farzandlari yo'qligini bildiradi) yoki ichki tugun (ya'ni kamida bitta bola bor).
T turiga tegishli va u bir xil T turiga ega bo'lishi kerak " deyishning o'zi etarli emas. Ba'zan siz " U turi kamida T bo'lishi kerak " demoqchisiz . Biz buni U ga yuqori chegara qo'yish deb ataymiz .
Nima uchun biz buni qilishni xohlashimiz mumkin? Aytaylik, biz ikkilik daraxtni amalga oshirmoqdamiz va uchta turdagi tugunga egamiz:
Oddiy TreeNode s
LeafNode s, ular bolalari bo'lmagan TreeNodelardir
InnerNode s, ular bolalarga ega bo'lgan TreeNode s. Keling, tugunlarimiz turlarini e'lon qilishdan boshlaylik:
turi TreeNode = { qiymat : string
}
turi LeafNode = TreeNode & {
isLeaf : rost
}
turi Ichki tugun = TreeNode & {
bolalar : [ TreeNode ] | [ TreeNode , TreeNode ]}
Biz aytmoqchi bo'lgan narsa: TreeNode - bu yagona xususiyatga ega ob'ekt, value . The
LeafNode turi TreeNode-ga ega bo'lgan barcha xususiyatlarga ega , shuningdek, isLeaf har doim ham haqiqatdir . InnerNode shuningdek, TreeNode ning barcha xususiyatlariga, shuningdek , bir yoki ikkita bolaga ishora qiluvchi bolalar xususiyatiga ega.
TreeNode ni qabul qiluvchi va uning qiymatini xaritalashtirib, yangi TreeNode ni qaytaradigan mapNode funksiyasini yozaylik . Biz quyidagi tarzda foydalanishimiz mumkin bo'lgan mapNode funksiyasini ishlab chiqmoqchimiz :
Do'stlaringiz bilan baham: |