бинарное дерево |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
бинарное дерево |
Екатерина7 |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 43 Пол: Женский Репутация: 0 |
кто может помочь, есть такая задача
написать программу которая печатате все числа бинарного дерева,используемые больше одного раза. напечатать все узлы дерева, в состав которых не входит заданная цифра и уровни соответствующие таким узлам Uses Crt; Const {-------------------------} {Форматы вывода числовых данных} S = 4; T = 1; {-------------------------} LTree = 4; {Размерность дерева, чем больше - тем большее дерево можно выводить на экран} {Используется для вывода дерева} {-------------------------} Type {-----------------------} TNode=^TTree; {Узел бинарного дерева} TTree = Record Info : Integer; {Числов узле} Left,Right : TNode; {Ссылки на сыновей} End; {-----------------------} var Number,ColN,k : Integer; {Число и счетчики} Tr: TNode; {Ссылка на вершину списка} St,St1: String; {Вспомогательные строки} P : Boolean; {Флаг вхождения числа в список удаляемых} {=============================================================} Function NewTree( X : Integer) : TNode; {Функция создания нового бинарного дерева} Var P : TNode; Begin New(P); P^.Info := X; P^.Left := Nil; P^.Right := Nil; NewTree := P; End; {NewTree} {-----------------------} Procedure AddTree(Var Tr:TNode; X : Integer); {Добавление в дерево по условию задачи} Begin If Tr = Nil Then Tr := NewTree(X) Else If(Tr^.Info = X) Then {Дубликаты запихиваем в правое поддерево} AddTree(Tr^.Right,X) {Добавление в правое поддерево} Else AddTree(Tr^.Left,X) {Добавление в левое поддерево} End; {AddTree} {---------------------------------------} Procedure Find(Tr:TNode); {Поиск чисел встречающихся неоднократно} Begin If Tr <> Nil Then Begin If Tr^.Right <> Nil Then Write(Tr^.Info: 3); Find(Tr^.Left); End; End; {Find} {---------------------------------------} Procedure FindLevel(Tr:TNode; Level : Integer); {Ищет узлы в которых нет заданного числа} Begin If Tr <> Nil Then Begin Inc(Level); {Увеличение уровня} If Tr^.Info <> Number Then {Вывод найденного узла} Writeln('Узел c цифрой = ', Tr^.Info, ' на уровне ', Level); FindLevel(Tr^.Left,Level); FindLevel(Tr^.Right,Level); End; End; {FindLevel} {----------------------------} Procedure PrintTree2(Tr:TNode; TecX,TecY,N,k: Integer); {Второй вариант распечатки дерева (Крутой)} Var P : Integer; Begin If Tr<>Nil then Begin If N < LTree Then Begin N := LTree; P := 1 End Else P := 0; If k = 0 Then Begin GotoXY(abs(TecX - (N div 2))+1,TecY-1); Write('\'); End; If k = 1 Then Begin GotoXY(TecX + (N div 2) + S-1,TecY-1); Write('/'); End; GotoXY(TecX,TecY); Write(Tr^.Info:3); PrintTree2(Tr^.Left,TecX - N,TecY+2,N-LTree,1); PrintTree2(Tr^.Right,TecX + N,TecY+2,N-LTree,0); End; End; {PrintTree2} {=============================================} Begin ClrScr; {----------------------------} {Инициализация данных и добавление их в дерево} Tr:=Nil; ColN := 0; Writeln('Введите массив чисел (Вводи любого символа - КОНЕЦ): '); While k = 0 do Begin Write('Введите ', ColN + 1, '-е число : '); Readln(St); Val(St,Number,k); If k = 0 Then Begin St1 := St1 +' ' + St; AddTree(Tr,Number); Inc(ColN); End; End; {----------------------------} Writeln; ClrScr; Writeln('Исходный массив чисел :'); Writeln(St1); {Выводим на экран введенную строку чисел} Writeln('---------------------------------------------------------'); Write('Введите число для проверки условия: '); Readln(Number); Writeln('---------------------------------------------------------'); Writeln('Полученное дерево с дубликатами :'); PrintTree2(Tr,WhereX+45,WhereY,ColN-2,3); {Распечатка дерева} Readkey; ClrScr; Writeln('---------------------------------------------------------'); Write('Числа используемые больше одного раза: '); Find(Tr); Writeln; {Ищем числа использованные больше одного раза} Writeln('---------------------------------------------------------'); Writeln('Узлы дерева, в состав которых не входит цифра ', Number,' :'); FindLevel(Tr,0); {Ищем узлы, в которых нет заданного числа} Writeln('---------------------------------------------------------'); Write('Нажмите клавишу ...'); Readkey; End. {Program End} и к ней программа.. что нужно исправить, чтоб было такое задание: написать программу,которая создает бинарное дерево, состоящее из целых чисел, вводимых с клавиатуры, печатает все числа бинарного дерева,используемые больше одного раза. напечатать все числа заданного дерева, в состав которых входит заданная цифра |
Текстовая версия | 23.12.2024 20:23 |