25.08.2015, 17:03 | #1 (permalink) |
Member
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Уточнение: является ли деревом сортировки
Вот решение: Код:
program trees; type pTree = ^Tree; Tree = record name: integer; left: pTree; right: pTree end; var s: integer; t: pTree; n, i: integer; procedure insert(var T: pTree; x: integer); begin if T = nil then begin new(T); T^.name := x; T^.left := nil; T^.right := nil; end else if T^.name >= x then insert(t^.left, x) else insert(t^.right, x); end; procedure obhod(t: Ptree); begin if T <> nil then begin obhod(T^.left); write(t^.name,','); obhod(t^.right); end; end; begin write('kol-vo chisel: '); read(n); t := nil; for i := 1 to n do begin read(s); insert(t, s); end; write('result. sortirovki: '); obhod(t); readln; end. |
25.08.2015, 17:03 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Данные топики очень похожи по содержанию на вашу тему Ключ сортировки – любой, алгоритм сортировки – пузырек Compaq Presario CQ57: уточнение модели - из 16 вариантов Моддинг деревом Работы с деревом (фанерой) Методы сортировки |
25.08.2015, 17:22 | #2 (permalink) |
Специалист
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,423
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 18120
|
На первый взгляд все верно, единственное по уму надо бы дерево в конце программы "разрушить", т.е. освободить память, но для данного примера это не критично, ну и концептуально, я бы в основной программе не стал вводить количество вводимых цифр, а заканчивал бы ввод спецсимволом, т.е. если например введен "!" (естественно тогда переменная s должна быть char и после проверки на ! ее надо преобразовывать в integer) - то закончить ввод и вывести дерево ...
|
25.08.2015, 17:48 | #3 (permalink) |
Member
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
MagentaTiger, спасибо!
Я переделала, но наверное неправильно... Поясните, не совсем поняла - если тип char, то воспринимаются только цифры. А ещё будьте добры, расскажите как освободить память? Код:
program trees; type pTree = ^Tree; Tree = record name: char; left: pTree; right: pTree end; var s: char; t: pTree; n, i: integer; procedure insert(var T: pTree; x: char); begin if T = nil then begin new(T); T^.name := x; T^.left := nil; T^.right := nil; end else if T^.name >= x then insert(t^.left, x) else insert(t^.right, x); end; procedure obhod(t: Ptree); begin if T <> nil then begin obhod(T^.left); write(t^.name,','); obhod(t^.right); end; end; begin write('vvedi chisla: '); repeat read(s); insert(t, s); until s='!'; write('result. sortirovki: '); obhod(t); readln; end. |
25.08.2015, 18:37 | #4 (permalink) |
Member
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
А ещё, такой вот вопрос: можно ли относительно данной задачи, решить ещё одну: Посчитать разность для каждой вершины полученного дерева между количеством левых и правых поддеревьев. . Как я поняла, там требуется посчитать количество левых и правых у каждой. Ну это ещё понятно вроде как сделать, но как ответ оформить?? Что на выходе должно быть?
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Метки |
free pascal, помощь, проверить |
|
|