3538p4.Summer2012

advertisement
COP 3538 – Data Structures with OOP
Project 4 – Summer 2012
Due: Class Time Monday, 23 July 2012
Binary Trees
Using NetBeans 7.1 or later version, you are to write a Java program using OOP
principles to accommodate the following functionality
Assignment #4
Objectives:
Provide student with experiences with generation of random numbers.
Provide student with expanded exercises in UML
Provide student with exercises in Javadoc and its various formats
Provide student with exercises in building a binary tree with object nodes
Provide student opportunity to display binary trees in various traversals
Provide student with experience in inserting and deleting node contents
of binary trees.
Functionality:
Task 1: Generate Random Numbers.
Using Java’s built in random number generator, you are to generate a sequence of
20 random non-negative integers (non-negative implies that zero is acceptable)
ranging 0 to 50. Let your first three numbers be 25, 12, and 37. Then use the
Random Number generator to generate seventeen more. As you build these
numbers, you are to push them into a stack using standard stack operations.
(Please note that you should allocate space for thirty random numbers, in case I
varying the number of input numbers required. You are to use an
InputOutputClass to accommodate building the stack of random integers, and
whatever additional methods are ‘appropriate’ for processing this stack. Note:
Do not push the 25, 12, and 37 onto the Stack. These will be the first three
numbers used to build the tree. Thus the intention is for 25 to be the root, 12
its left successor and 37 its right successor. Equivalently, you may, after
generating 17 numbers, push 37, 12, and 25 onto the stack.
Task 2: Display the Stack of Random Numbers.
Using an appropriate header, such as Generated Random Numbers, display
five at a time, left justified. Skip a line or two after displaying the last set of
five.
Task 3: Build a Binary Search Tree.
From the stack of integers, you are to build a binary search tree. Recognize that
your tree may not look pretty and may be skewed left or right. It is quite unlikely
it will be any where near balanced.
Task 4: Display the Binary Search Tree. (Recursive NLR Scan)
You are to display the tree using a recursive NLR scan. The format is to contain
a header, left justified on the display line that contains the entries: Recursive
NLR Scan followed by a blank line followed by the list of integers left justified.
Skip a line after displaying the last integer.
The format should be
N
25
L
12
R
37
etc
Continue in columnar fashion printing recursively (that is, NLR)
Task 5. Display the Binary Search Tree (Recursive LNR Scan)
Display the binary search tree using a recursive LNR scan.
The format should be
N
L
R
n
n
n
n = some number etc
Continue in columnar fashion printing recursively (that is LNR) Format as above.
Remember that when you print the node, relative to that node, it is considered N for that
subtree; that is, the first L that is printed must be considered N for that node and its left
and right subtree will be null.
Task 6: Display the Binary Search Tree. You are to display the tree using an iterative
NLR scan.
Same formats as in Task 4. But your first header says: Iterative NLR Scan.
Task 7: Display the binary Search tree using an iterative LNR scan.
Same format as in Task 5.
Task 8. Display the binary search tree using an iterative RNL scan. (This is tricky)
Same formats as above. Format will be same. Use the RNL scan to drive your printing.
Task 9. Display the binary search tree using an iterative LRN scan. (This too can
be tricky) Same formats as above, but sequence will be LRN nodes. But print with same
header: N L R.
Task 10. Delete from Binary Search Tree. (Now the fun parts.) You are, using your
InputOutput class and appropriate method (you design) in this object, to prompt me for
an integer to delete. You are to continue to prompt me for inputs and take the actions
below until I submit a -1 to you, at which time your program is to gracefully terminate.
Given your NLR scans, I can easily (you can too!) see what tree nodes are leaves, those
with one child, and those with two children. I will submit inputs to you one at a time in
all three categories. You are to echo print my input to you, delete the indicated node, and
print the resulting tree in recursive LNR format, which you have done before. Make the
results of this clear to the client (me). Your LNR scan will be used to verify you have
deleted the node requested.
Deliverable:
You are to zip all files in your P4 as expected and Send them to be via the
assignment tab using the same naming conventions as in P0. Be certain your zipped file
runs! Please note: use zip files. If you use .rar files, I do not guarantee we can
grade – and this is bad. For UML, you may use Word, Power Point, or SmartDraw
Unzip it and run it locally before you send it to me. If it does not work, I cannot grade it.
Good testing? Ask a colleague to test your program for you!!
Grade Sheet for Program 4 – Trees
Name: __________________
Grade: __________________
Source Code – 10 points _________________________________
Indentation; Internal comments
Scope terminators; Choice of attribute names, etc.
Program Design – 30 points _____________________________
UML …………………………………………………………………… 10 points
Be sure to include all elements of the entrees – visibility, parameters, etc.
Detail Design …………………………………………………………… 20 points
Provide pseudocode for class that contains all the tree scan methods. This
needs to be well done. I will look at this carefully.
Javadoc – 10 points - ____________________________________points
No excuse to not have this wonderful this time! Remember, all
methods require @param and @return.
Appropriateness and completeness of comments
ALL methods must have Javadoc comments up front that are meaningful, please.
Outputs – 50 points
Accuracy and Format. All functionality present!
Skip lines in between displayed outputs as described above. .
Include headers / descriptors as described.
 If your program does not contain all the functionality required, you cannot expect a
grade above 60, that is a ‘passing grade.’ Please note that this will be rigidly enforced.
Program must be on time for full credit.
Bonus - 5 points for each feature you incorporate into your program. You will
need to include code that checks to see if my inputs to you are appropriate nonnegative integers; do not allow duplicates; diagnose not found nodes to be deleted;
any other reasonable edit. Code to handle these error conditions should likely be
handled via a try…catch sequence. (At the time of this writing, there is a potential
for fifteen bonus points)
Start early and do this a little at a time.
Always have a working product (not necessarily a product that contains all the
features….)
Remember, work smarter not harder.
Download