Բինար ծառերը համակարգչային գիտության մեջ լայնորեն կիրառվող հիմնարար տվյալային կառուցվածք են։ Դրանք հատկապես օգտակար են արդյունավետ ալգորիթմներ ստեղծելու համար, օրինակ՝ որոնման, տեսակավորման և տվյալների շրջանցման խնդիրներում։
Բինար ծառերը կազմված են հանգույցներից, որտեղ յուրաքանչյուր հանգույց կարող է ունենալ ոչ ավել, քան երկու զավակ՝ ձախ և աջ։ Ե՛րբ ձախ, ե՛րբ աջ զավակները նույնպես կարող են ունենալ իրենց ձախ և աջ զավակները, և այդ կառուցվածքն այնքան է շարունակվում, քանի դեռ ծառի մեջ այլ հանգույցներ չկան։
Բինար ծառի վերին հանգույցը կոչվում է արմատ, իսկ ամենացածր հանգույցները կոչվում են տերևներ։
Այս պարզ գաղափարը թույլ է տալիս ներկայացնել բավականին տարբեր տվյալային տիպեր հեշտությամբ, և այն հեշտ է իրականացնել տարբեր ծրագրավորման լեզուներով.
Բինար ծառ 8 հանգույցով։ #1 հանգույցը ծառի արմատն է, մինչդեռ #4, #7, #8 և #6 հանգույցները ծառի տերևներն են։
class Node: # Node օբյեկտ, որը պարունակում է տվյալները յուրաքանչյուր հանգույցի համար
def __init__(self, value): # Արժեքը, որը տեղադրվում է հանգույցի մեջ (կարող է լինել ցանկացած բան)
self.left = None # Սկզբում ձախն ու աջը None են
self.right = None
self.value = value # Պահում է արժեքը օբյեկտի մեջ
# Ձեռքով ստեղծում ենք բոլոր հանգույցները
root = Node(1)
root.left, root.right = Node(2), Node(3)
root.left.left, root.left.right = Node(4), Node(5)
root.left.right.left, root.left.right.right = Node(7), Node(8)
root.right.right = Node(6)
# Այնուհետև կարող ենք ռեկուրսիվ շրջանցել ամբողջ բինար ծառը
# Հաշվենք բոլոր հանգույցների գումարը
def treesum(node: Node | None) -> int:
if node is None:
return 0
# Վերադարձնում է ձախ ենթածառի, աջ ենթածառի և տրված հանգույցի արժեքների գումարը
return treesum(node.left) + treesum(node.right) + node.value
print(treesum(root)) # Тպում է 36
Այս օրինակում մենք շրջանցում ենք հանգույցները սկսած root-ից։ Եթե ընթացիկ հանգույցը None է, ուրեմն տվյալ ուղու ենթածառը վերջացել է, ու պետք է վերադարձնել 0։ Հակառակ դեպքում, խոչընդոտ չկա գումարելու ձախ ենթածառի, աջ ենթածառի և ընթացիկ հանգույցի արժեքների գումարը։
Առաջադրանք: Ձեռքով ստեղծել բինար ծառ
Տրված է նկարում երեւացող բինար ծառը։ Ձեզ առաջարկվում է ձեռքով ստեղծել այդ ծառը։
Գրեք կոդ, որը կստեղծի բինար ծառը։ Ոչինչ տպելու կարիք չկա։ Այդ մասը ավտոմատ է իրականացվում։