Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2010, 19:33   #1
Steelix
Новичок
Джуниор
 
Регистрация: 10.10.2010
Сообщений: 1
По умолчанию Обход дерева сортировки (pascal)

Помогите пожалуйста, я написал программку для сортировки таблицы с помощью двоичного дерева, но обход дерева работает неправильно. Напишите пожалуйста как правильно должна выглядеть процедура вывода дерева в таблицу( процедура WriteTree), в ней вся проблема. Вот программка:

Код:
program TreeSort;

type
	tKey = string[10];
	tData = string[10];
	tItem = record
		key: tKey;
		data: tData;
	end;
	tPtr = ^tNode;
	tNode = record
		left, right: tPtr;
		key: tKey;
		data: tData;
	end;
	tTree = tPtr;
	tTable = record
		NumofItems: integer;
		Items: array [1..nmax] of tItem;
	end;
	tSymbols = array[1..62] of char;

procedure FillSymbols(var S: tSymbols);
var
	i: integer;
	ch: char;
begin
	i := 1;
	for ch := '0' to 'z' do begin
		if ch in ['0'..'9', 'A'..'Z', 'a'..'z'] then begin
			s[i] := ch;
			i := i + 1;
		end;
	end;
end;

procedure FillTable(var t: tTable; var S: tSymbols; n: integer);
var
	str: string;
	i, j, len: integer;
begin
	randomize;
	t.NumofItems := n;
	with t do begin
		for i := 1 to n do begin
			t.items[i].data := '0123456789';
		end;
		i := 1;
		while i <= n do begin
			len := random(10) + 1;
			str := '';
			for j := 1 to len do begin
				str := str + s[random(62)+1];
			end;
			items[i].key := str;
			i := i + 1;
		end;
	end;
end;

procedure AddToSortTreeTime(var t: tTree; var key: tKey; var d: tData);
begin
	if t = nil then begin
		New(t);
		t^.key := key; t^.data := d;
		t^.left := nil; t^.right := nil;
	end
	else if key < t^.key then begin
		AddToSortTreeTime(t^.left, key, d);
	end
	else if key > t^.key then begin
		AddToSortTreeTime(t^.right, key, d);
	end;
end;

procedure WriteTree(var t: tTable; var tr: tTree; i: integer);
begin
	if (tr^.right <> nil) then WriteTree(t, tr^.right, i);
		i  := i + 1;;
		t.items[i].key := tr^.key;
	if (tr^.left <> nil) then WriteTree(t, tr^.left, i);
end;

var
        t: tTable;
	tr: tTree;
	n, i: integer;
	S: tSymbols;
begin
	randomize;
	FillSymbols(S);
	n := 20;
	FillTable(t, S, n);;
	for i := 1 to n do begin
		AddtoSortTreeTime(tr, t.items[i].key, t.items[i].data);
	end;
	i := 0;
	WriteTree(t, tr, i);
	for i := 1 to n do begin
	        writeln(t.items[i].key);
	end;
	readln;
end.
Steelix вне форума Ответить с цитированием
Старый 23.09.2011, 01:17   #2
oleg_kn
Пользователь
 
Регистрация: 08.09.2011
Сообщений: 10
По умолчанию

я вот ету юзал =)

procedure view(n : vkl; var d:integer);
var
i : integer;
begin
for i:=1 to d do begin
write(' ') end;
writeln(n^.zap^,'(',n^.klych,')');
if (n^.lv=nil) and (n^.pr=nil) then d:=d-1
else begin
if n^.lv<>nil then begin
d:=d+1;
view(n^.lv,d);
end;
if n^.pr<>nil then begin
d:=d+1;
view(n^.pr, d);
end;
d:=d-1;
end;
end;
oleg_kn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание и обход дерева jonni2008 Общие вопросы .NET 1 12.11.2010 06:05
Обход двоичного дерева F1nk Помощь студентам 0 03.06.2010 17:51
Симетрический обход дерева LokTar Помощь студентам 4 18.05.2010 11:49
Обход дерева в глубину patriarch Общие вопросы C/C++ 1 07.05.2009 12:31
обход дерева ribka Помощь студентам 2 11.12.2007 20:38