⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtstbtre.dpr

📁 Eazy Data Structures library for Delphi.
💻 DPR
📖 第 1 页 / 共 2 页
字号:
          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 + -