Main Program for Binary Search Tree
This program is a simple main program to test our unit BinSTree. You do not need to use this program for our assignment, and you do not need to turn it in.
{ Bert G. Wachsmuth } { April 12, 1996 } program BinTreeTest; uses WinCrt, BinSTree; var Tree : BinarySearchTree; MenuChoice: char; Success : Boolean; ST: Status; procedure Wait; begin Characters(Tree, ST); Write('Tree Characteristics: '); Write(' Size: ',ST.size:3); Write(' Height: ',ST.height:3); Writeln(' Avg Path: ',ST.avgLen:6:2); Write('Press RETURN to continue ...'); Readln; end; procedure ShowMenu(var Choice: Char); begin ClrScr; Writeln('******************'); Writeln('Binary Tree Tester'); Writeln('******************'); Writeln; Writeln('1 - to insert an element into the tree'); Writeln('2 - to delete an element from the tree'); Writeln('3 - to traverse the tree'); Writeln('4 - to find an element by key value'); Writeln('5 - to show data of current node'); Writeln; Writeln; Writeln('0 - to exit'); Writeln; Write('Your choice: '); Readln(Choice); end; procedure TraverseMenu(Tree: BinarySearchTree); var Choice : char; begin if IsEmpty(Tree) then Writeln('Tree is empty') else begin Writeln; Writeln('a - for preOrder traversal'); Writeln('b - for InOrder traversal'); Writeln('c - for postOrder traversal'); Writeln; Write('Your choice: '); Readln(Choice); case UpCase(Choice) of 'A': Traverse(Tree,'pre'); 'B': Traverse(Tree,'in'); 'C': Traverse(Tree,'post'); else Writeln('Wrong Menu Choice !!!'); end; end; Wait; end; procedure CurrentMenu(Tree: BinarySearchTree); var el: StdElement; begin if IsEmpty(Tree) then Writeln('Tree is empty !') else begin Retrieve(Tree,el); WriteStdElement(el); end; wait; end; procedure DeleteMenu(var Tree: BinarySearchTree); var Key : KeyType; Okay : boolean; begin if (not IsEmpty(Tree)) then begin Write('Enter key to delete: '); Readln(key); Delete(Tree,Key,Okay); if okay then Writeln('Element deleted') else Writeln('Element NOT deleted (it could not be found)'); end else Writeln('Tree is empty ...'); wait; end; procedure FindMenu(var Tree: BinarySearchTree); var Success : boolean; Key : integer; el : StdElement; begin Success := false; Write('Search for: '); Readln(Key); Find(Tree, Key, success); if success then begin Retrieve(Tree, el); WriteStdElement(el); Writeln; end else Writeln('not found'); Wait; end; procedure InsertMenu(var Tree: BinarySearchTree); var Success : boolean; Key : integer; el : StdElement; begin Write('Insert key: '); ReadStdElement(el); Insert(Tree, el, success); if success then Writeln('Element inserted') else Writeln('ERROR: Duplicate key value. Element not inserted'); Wait; end; begin MakeEmptyTree(Tree); MenuChoice := ' '; repeat ShowMenu(MenuChoice); Case MenuChoice of '1': InsertMenu(Tree); '2': DeleteMenu(Tree); '3': TraverseMenu(Tree); '4': FindMenu(Tree); '5': CurrentMenu(Tree); else if (MenuChoice <> '0') then begin Writeln('Wrong Menu Choice !!!'); Wait; end; end; until (MenuChoice = '0'); Writeln('Thank you for using the Tree Tester Program ...'); end.(bgw)