Сборник по задачам и примерам Assembler


Построение двоичного дерева - часть 2


push type node_tree:размер структуры для узла дерева

push 0 :флаги не задаем

push HandJHead :описатель кучи

call НеарАПос

pop ecx

mov ebx.eax запоминаем указатель на узел дерева в ebx

mov NewNode.eax :и во врем, перем. ¦подчистим выделенную область памяти в куче

movedi.eax

push ecx

mov ecx.type node_tree

mov al .0 rep stosb

pop ecx

:читаем очередное число из mas и записываем его в новый узел lodsb :число в al mov [ebx].simbol,al

;ищем место в дереве согласно условиям упорядочивания ;и настраиваем указатели в узлах дерева

mov ebx.HeadTree m_search: cmpal.[ebx].simbol mov edi .ebxпродублируем

jae ml :если al >= [ebxj.simbol :если меньше, то идем по левой ветке

mov ebx.[ebx].l_son

cmp ebx.O

jnem_search ;если этого сына нет. то добавляем его к папе

mov ebx.NewNode

mov [edi].l_son.ebx

jmp end_cycl 1

:если больше или равно, то по правой ml: mov ebx. [ebx]. r_son

cmp ebx.O

jnem_search :если этого сына нет. то добавляем его к папе

mov ebx.NewNode

mov [edi].r_son.ebx end_cycll: loop @@cycll

ret ;двоичное дерево поиска построено BuildBinTree endp start proc near :точка входа в программу:

call BuildBinTree

В результате мы должны получить дерево, обойдя которое в определенном порядке, получим упорядоченный массив чисел:

2h.4h.4h,5h.7h,8h.nh.llh,12h.l2h.21h.22h.26h.32h,35h,37h.37h.4*5h.49h.51h.52h. 54h.65h.65h.73h.77h.87h.

бедимся в этом, разработав программу обхода двоичного дерева.




Начало  Назад  Вперед