📄 dtstbtre.dpr
字号:
WriteLog('');
WriteLog('..postorder..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..levelorder..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('...delete the leftmost');
Walker := Root;
while not IsLeaf(Walker) do
Walker := Left(Walker);
Walker := Parent(Walker);
Erase(Walker);
WriteLog('...the tree now looks like this');
WriteLog('... one');
WriteLog('... / \');
WriteLog('... four three');
WriteLog('... / \ /');
WriteLog('... five nine six');
WriteLog('... / \');
WriteLog('... seven ten');
WriteLog('..preorder..');
TraversalType := ttPreOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..inorder..');
TraversalType := ttInOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..postorder..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..levelorder..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('...delete the rightmost');
Walker := Root;
while not IsLeaf(Walker) do
Walker := Right(Walker);
Walker := Parent(Walker);
Erase(Walker);
WriteLog('...the tree now looks like this');
WriteLog('... one');
WriteLog('... / \');
WriteLog('... four six');
WriteLog('... / \ / \');
WriteLog('... five nine seven ten');
WriteLog('..preorder..');
TraversalType := ttPreOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..inorder..');
TraversalType := ttInOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..postorder..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..levelorder..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
Empty;
WriteLog('...end of test 2');
end;
WriteLog('Third test: cloning');
with BSTree do
begin
WriteLog('...inserting names of numbers');
for i := 1 to 10 do
Insert(Walker, EZStrNew(NumToName(i)));
WriteLog('...creating clone');
NewBSTree := TBinSearchTree.Clone(BSTree, true, EZStrCompare);
WriteLog('..clone preorder..');
NewBSTree.TraversalType := ttPreOrder;
NewBSTree.Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..clone inorder..');
NewBSTree.TraversalType := ttInOrder;
NewBSTree.Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..clone postorder..');
NewBSTree.TraversalType := ttPostOrder;
NewBSTree.Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..clone levelorder..');
NewBSTree.TraversalType := ttLevelOrder;
NewBSTree.Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('...end of test 3');
end;
WriteLog('Fourth test: joining');
with BSTree do
begin
WriteLog('...alter clone''s strings to have last letter Z');
NewBSTree.Iterate(AlterStrs, false, nil);
WriteLog('');
WriteLog('...join');
Join(Walker, NewBSTree);
NewBSTree := nil;
WriteLog('...the tree now looks like this');
WriteLog('... one');
WriteLog('... / \');
WriteLog('... four two');
WriteLog('... / \ / \');
WriteLog('... five nine three twz');
WriteLog('... / \ / \ / \');
WriteLog('... 8 5z 4z 9z six threz');
WriteLog('... \ / \');
WriteLog('... 8z 7 10');
WriteLog('... / \ / \');
WriteLog('... 1z 7z 6z 10z');
WriteLog('..preorder..');
TraversalType := ttPreOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..inorder..');
TraversalType := ttInOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..postorder..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..levelorder..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('...end of test 4');
end;
finally
BSTree.Free;
NewBSTree.Free;
end;
WriteLog('----------------RED-BLACK SEARCH TREE----------------');
rbTree := nil;
NewrbTree := nil;
try
WriteLog('First test: insertion; traversing');
rbTree := TrbSearchTree.Create(true);
with rbTree do
begin
Compare := EZStrCompare;
DupData := EZStrDupData;
DisposeData := EZStrDisposeData;
WriteLog('...inserting names of numbers');
for i := 1 to 10 do
Insert(Walker, EZStrNew(NumToName(i)));
WriteLog('...the tree now looks like this');
WriteLog('... seven');
WriteLog('... / \');
WriteLog('... four* three*');
WriteLog('... / \ / \');
WriteLog('... five one six two');
WriteLog('... / / \');
WriteLog('...eight* nine* ten*');
WriteLog('...(*=red nodes)');
WriteLog('...Traversals');
WriteLog('..preorder..');
TraversalType := ttPreOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..inorder..');
TraversalType := ttInOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..postorder..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..levelorder..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..preorder reversed..');
TraversalType := ttPreOrder;
Iterate(PrintStrs, true, nil);
WriteLog('');
WriteLog('..inorder reversed..');
TraversalType := ttInOrder;
Iterate(PrintStrs, true, nil);
WriteLog('');
WriteLog('..postorder reversed..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, true, nil);
WriteLog('');
WriteLog('..levelorder reversed..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, true, nil);
WriteLog('');
WriteLog('...end of test 1');
end;
WriteLog('Second test: deletion');
with rbTree do
begin
WriteLog('...delete the rightmost');
Walker := Root;
while not IsLeaf(Walker) do
Walker := Right(Walker);
Walker := Parent(Walker);
Erase(Walker);
WriteLog('...the tree now looks like this');
WriteLog('... seven');
WriteLog('... / \');
WriteLog('... four* ten*');
WriteLog('... / \ / \');
WriteLog('... five one six three');
WriteLog('... / /');
WriteLog('...eight* nine*');
WriteLog('...(*=red nodes)');
WriteLog('..preorder..');
TraversalType := ttPreOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..inorder..');
TraversalType := ttInOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..postorder..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..levelorder..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('...delete the leftmost');
Walker := Root;
while not IsLeaf(Walker) do
Walker := Left(Walker);
Walker := Parent(Walker);
Erase(Walker);
WriteLog('...the tree now looks like this');
WriteLog('... seven');
WriteLog('... / \');
WriteLog('... four* ten*');
WriteLog('... / \ / \');
WriteLog('... five one six three');
WriteLog('... /');
WriteLog('... nine*');
WriteLog('...(*=red nodes)');
WriteLog('..preorder..');
TraversalType := ttPreOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..inorder..');
TraversalType := ttInOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..postorder..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..levelorder..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('...delete the rightmost');
Walker := Root;
while not IsLeaf(Walker) do
Walker := Right(Walker);
Walker := Parent(Walker);
Erase(Walker);
WriteLog('...the tree now looks like this');
WriteLog('... seven');
WriteLog('... / \');
WriteLog('... four* ten');
WriteLog('... / \ /');
WriteLog('... five one six*');
WriteLog('... /');
WriteLog('... nine*');
WriteLog('...(*=red nodes)');
WriteLog('..preorder..');
TraversalType := ttPreOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..inorder..');
TraversalType := ttInOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..postorder..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..levelorder..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
Empty;
WriteLog('...end of test 2');
end;
WriteLog('Third test: cloning');
with rbTree do
begin
WriteLog('...inserting names of numbers');
for i := 1 to 10 do
Insert(Walker, EZStrNew(NumToName(i)));
WriteLog('...creating clone');
NewrbTree := TrbSearchTree.Clone(rbTree, true, EZStrCompare);
WriteLog('..clone preorder..');
NewrbTree.TraversalType := ttPreOrder;
NewrbTree.Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..clone inorder..');
NewrbTree.TraversalType := ttInOrder;
NewrbTree.Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..clone postorder..');
NewrbTree.TraversalType := ttPostOrder;
NewrbTree.Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..clone levelorder..');
NewrbTree.TraversalType := ttLevelOrder;
NewrbTree.Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('...end of test 3');
end;
WriteLog('Fourth test: joining');
with rbTree do
begin
WriteLog('...alter clone''s strings to have last letter Z');
NewrbTree.Iterate(AlterStrs, false, nil);
WriteLog('');
WriteLog('...join');
Join(Walker, NewrbTree);
NewrbTree := nil;
WriteLog('..preorder..');
TraversalType := ttPreOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..inorder..');
TraversalType := ttInOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..postorder..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..levelorder..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('...end of test 4');
end;
WriteLog('Fifth test: resetting Compare');
with rbTree do
begin
Empty;
WriteLog('...inserting names of numbers');
for i := 1 to 10 do
Insert(Walker, EZStrNew(NumToName(i)));
WriteLog('...setting Compare');
Compare := ReverseCompare;
WriteLog('...the tree now looks like this');
WriteLog('... nine');
WriteLog('... / \');
WriteLog('... six five');
WriteLog('... / \ / \');
WriteLog('... three one four eight');
WriteLog('... / \ /');
WriteLog('... two ten seven');
WriteLog('..preorder..');
TraversalType := ttPreOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..inorder..');
TraversalType := ttInOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..postorder..');
TraversalType := ttPostOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('..levelorder..');
TraversalType := ttLevelOrder;
Iterate(PrintStrs, false, nil);
WriteLog('');
WriteLog('...end of test 5');
end;
finally
rbTree.Free;
NewrbTree.Free;
end;
finally
CloseLog;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -