Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_matni(MAG_ST).doc
Скачиваний:
3
Добавлен:
10.01.2024
Размер:
1.11 Mб
Скачать

Бинар тереклер

Бинар тереклер ең көп пайдаланылатуғын тереклер түри есапланады.

Тереклердиң ЭЕМ ядында сүўретлениўине көре ҳәр бир элемент төрт майданға ийе жазыў есапланады. Усы майданлар мәниси сәйкес түрде жазыў гилти болып, басқа элементлерге мүрәжәтти аңлатады, яғный шепке-төменге, оңға-төменге ҳәм жазыў текстине.

Соны есте тутыў керек, терек пайда етилип атырғанда, атаға салыстырғанда шеп тәрептеги бала мәниси киши гилтке, оң тәрептеги бала болса үлкен мәнисли гилтке ийе болады. Мәселен, төмендеги элементлерден бинар терек қурамыз: 50, 46, 61, 48, 29, 55, 79. Ол төмендеги көриниске ийе болады:

Нәтийжеде, оң ҳәм шеп бөлим тереклери бирдей басқышлы тәртиплестирилген бинар терек пайда еттик. Егер теректиң оң ҳәм шеп бөлим тереклери басқышларының парқы бирден киши болса, бундай терек идеал тең салмақтағы терек делинеди. Жоқарыда пайда етилген бинар терегимиз идеал тең салмақтағы терекке мысал болады.

Бинар теректи пайде етиў ушын ЭЕМ ядында элементлер төмендеги түрде болыўы керек:

V = MakeTree(Key, Rec) әмели еки көрсеткишли (гилт) ҳәм еки майданли (информациялық) элемент жаратады (терек түйини)

MakeTree процедурасы көриниси:

Паскаль

New(p);

p^.r := rec;

p^.k := key;

v := p;

p^.left := nil;

p^.right := nil;

Басында гилт биринши мәниси киритиледи. Оннан соң элементтиң өзин maketree процедурасы арқалы пайда етемиз. Кейин болса көрсеткиш бос мәнисти көрсеткенше циклды даўам етемиз.

READ(key,rec)

tree=maketree(key,rec)

WHILE not eof DO

READ(key,rec)

V=maketree(key,rec)

WHILE P<>nil DO

Q=P

IF key=k(P)

THEN P=left(P)

ELSE P=right(P)

END IF

END WHILE

IF P=nil

THEN WRITELN(' Бул тамыр');

tree=V

ELSE IF key<k(q)

THEN left(P)=V

ELSE right(P)=V

END IF

END IF

END WHILE

m-өлшемли теректи бинар көриниске келтириў

Формал емес алгоритм:

1. Теректиң ҳәр бир түйининде үлкен балаға сәйкес шетки шеп шақадан тысқары барлық шақалары кесип тасланады.

2. Бир атаның барлық балалары горизонтал сызық пенен байланысады.

3. Пайда етилген структураның ҳәр бир түйининде үлкен бала усы түйинниң төменинде турған түйин есапланады (егер ол бар болса).

Алгоритм әмеллер избе-излиги төменде келтирилген.

яки

m-өлшемли теректи бинар көриниске келтириў.

Тереклер үстинде орынланатуғын әмеллер

1. Теректи айланып шығыў (Обход дерева).

2. Бөлим теректи өшириў.

3. Бөлим терек қосыў.

Теректи айланып шығыўды әмелге асырыў ушын төмендеги үш процедураны орынлаў лазым:

1. Тамырды қайта ислеў.

2. Шеп тармақ(шақа)ты қайта ислеў.

3. Оң тармақ(шақа)ты қайта ислеў.

Жоқарыдағы процедура қандай избе-изликте әмелге асырылыўына қарап айланып шығыўды үш көриниске ажыратылады.

1. Жоқарыдан төменге. Процедура төмендеги избе-изликте орынланады

A-B-C.

2.Шептен оңға. Процедура төмендеги избе-изликте орынланады

B-A-C.

3. Төменнен жоқарыға. Процедура төмендеги избе-изликте орынланады

B-C-A.

Мәселен төмендеги теректе айланып шығыўды өткерейик.

Терек айланып шығыў тәртиби:

Жоқарыдан төменге: A,B,C,D,E,F,G.

Шертен оңға: C,D,B,E,F,A,G.

Төменнен жоқарыға: D,C,F,E,B,G,A.

Терек көригиниң рекурсив процедурлары:

1) PROCEDURE pretrave (tree) {жоқарыдан төменге көрик}

IF tree<>nil

THEN PRINT info (tree)

pretrave (left (tree))

pretrave (right (tree))

END IF

RETURN

2) PROCEDURE intrave (tree)

IF tree<>nil

THEN intrave (left (tree))

PRINT info (tree)

intrave (right (tree))

END IF

RETURN

3) PROCEDURE postrave (tree)

IF tree<>nil

THEN postrave (left (tree))

postrave (right (tree))

PRINT info (tree)

END IF

RETURN

Бинар терек бойынша излеў процедурасы

Усы процедураның ўазыйпасы соннан ибарат, ол берилген гилт бойынша терек түйинин излеўди әмелге асырады. Излеў операциясының даўамлылығы терек структурасына байланыслы болады. Ҳақыйқаттан, егер элементлер терекке гилт мәнислери өсиў (кемейиў) тәртибинде келип түскен болса, ол жағдайда терек бир тәрепке бағдарланған дизим пайда етеди (шығыў дәрежеси бир болады, яғный жалғыз шақаға ийе), мәселен:

Бул жағдайда теректе излеў ўақты, бир тәреплеме бағдарланған дизимдеги киби болып, орташа қарап шығыўлар саны N/2 болады.

Егер терек тең салмақлы болса, ол жағдайда излеў ең өнимли нәтийже береди. Бул жағдайда излеў ден көп болмаған элементлерди көрип шығады.

Излеў процедурасын көрип шығамыз. search өзгериўшисине табылған буўын көрсеткиши өзлестириледи:

p=tree

WHILE p<>nil DO

IF key=k (p)

THEN search=p

RETURN

END IF

IF key<>k (p)

THEN p=left (p)

ELSE p=right (p)

END IF

END WHILE

search=nil

RETURN

Терекке жаңа элемент қосыў процедурасы

Терекке қандайда бир элементти қосыўдан алдын теректе берилген гилт бойынша излеўди әмелге асырыў керек болады. Егер берилген гилтке тең гилт бар болса, ол жағдайда программа өз жумысын жуўмақлайды, кери жағдайда терекке элемент қосыў әмелге асырылады.

Терекке жаңа жазыўды киритиў ушын, алдын теректиң сондай түйинин табыў керек, нәтийжеде усы түйинге жаңа элемент қосыў мүмкин болсын. Керекли түйинди излеў алгоритми де тап берилген гилт бойынша түйинди табыў алгоритми киби болады. Бирақ берилген гилт бойынша излеў процедурасынан туўрыдан-туўры пайдаланып болмайды, себеби, излеў процедурасында, қайсы түйинде мүрәжәт NIL (search = nil) болғаны фиксирленбейди.

Излеў процедурасын сондай модификация қыламыз, қосымша эффект сыпатында жаңа процедурамыз берилген гилт турған түйинди фиксирлесин (излеў табыслы болса), яки сондай түйиндики, усы түйинди қайта ислегеннен кейин излеў жуўмақлансын (излеў табыслы болса).

Теректе қосылып атырған элемент гилтине тең гилтли элемент жоқ болған жағдайда элементти қосыў процедурасын келтирип өтемиз.

q=nil

p=tree

WHILE p<>nil DO

q=p

IF key=k (p)

THEN search=p

RETURN

END IF

IF key<k (p)

THEN p=left (p)

ELSE p=right (p)

END IF

END WHILE

{Берилген гилтке тең түйин табылмады, элемент қосыў талап қылынады. Ата болыўы мүмкин түйинге q көрсеткиш бериледи.}

V=maketree (key, rec)

{Қойылып атырған V элемент шеп яки оң бала болыўын анықлаў лазым.}

IF key<k (q)

THEN left (q)=V

ELSE right (q)=V

END IF

search=V

RETURN

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]