Practice Exercise
Copying a Tree
Your task is to write a function, treeCopy, that copies a tree up to a given depth. If the given depth is negative, you should return an empty tree. If the given depth is greater than the height of the tree, you should return a copy of the entire tree.
Download
While in your practice exercises directory, run the following command:
unzip /web/cs2521/practice-exercises/trees/treeCopy/downloads/treeCopy.zip
If you're working at home, download treeCopy.zip by clicking on the above link and then unzip the downloaded file.
Files
| tree.c | Contains code for reading and printing a binary tree |
| tree.h | Contains the definition of the binary tree data structure and function prototypes |
| testTreeCopy.c | Contains the main function, which reads in a binary tree from standard input, calls treeCopy, and prints out the result. |
| treeCopy.c | Contains treeCopy, the function you must implement |
| Makefile | A makefile to compile your code |
| tests/ | A directory containing the inputs and expected outputs for some basic tests |
| autotest | A script that uses the tests in the tests directory to autotest your solution. You should only run this after you have tested your solution manually. |
Examples
./testTreeCopy
Enter the preorder traversal of the tree: 4 2 1 3 6 5 7
Enter the in-order traversal of the tree: 1 2 3 4 5 6 7
Enter depth: 1
Tree:
4
/ \
/ \
/ \
2 6
/ \ / \
1 3 5 7
Copy of the tree up to depth 1:
4
/ \
2 6
./testTreeCopy
Enter the preorder traversal of the tree: 2 1 4 3 6 5
Enter the in-order traversal of the tree: 1 2 3 4 5 6
Enter depth: 0
Tree:
2
/ \
1 4
/ \
3 6
/
5
Copy of the tree up to depth 0:
2
./testTreeCopy Enter the preorder traversal of the tree: 4 1 7 Enter the in-order traversal of the tree: 1 4 7 Enter depth: -1 Tree: 4 / \ 1 7 Copy of the tree up to depth -1: X
Testing
You can compile and test your function using the following commands:
make # compiles the program ./testTreeCopy # tests with manual input, outputs to terminal ./testTreeCopy < input-file # tests with input from a file, outputs to terminal ./testTreeCopy < tests/01.in # for example, tests with input from tests/01.in # (then manually compare with tests/01.exp)
After you have manually tested your solution, you can autotest it by running ./autotest. This will run some basic tests on your program, as well as check for memory leaks/errors.
It is possible to devise your own tests by creating your own input files. See the existing input files for examples. Note that you will need to check the output yourself.