1. The rectangles do NOT overlap with each other in a Rectangle quadtree. 2. In a PM1 quadtree, there is only one edge in a block unless they meet in that block. Otherwise, the block will be decomposed. 3. The Java applet demos do not show the structure of quadtrees explicitly, but please be aware that a node in the tree is associated with a block in space. For example, given a 8 * 8 array of pixels, the root of tree represents the biggest block, i.e., [0, 7] x [0, 7], where [xmin, xmax] x [ymin, ymax] indicates the region of the block. Then when this block is decomposed, 4 smaller blocks are generated, i.e., [0, 3] x [0, 3], [0, 3] x [4, 7], [4, 7] x [0, 3], [4, 7] x [4, 7]. Meanwhile 4 new nodes are created to represent new blocks, and they are all children of the root. Moreover, if there are two or more objects in the block [4, 7] x [0, 3] or [0, 3] x [4, 7], these blocks should be decomposed as well. Here is the demonstration of the quadtree mentioned above: ==================================================================================================== [0, 7] x [0, 7] | +----------------+----------------+----------------+ | | | | [0, 3] x [0, 3] [0, 3] x [4, 7] [4, 7] x [0, 3] [4, 7] x [4, 7] | | | +----------------+----------------+----------------+ | | | | | | [4, 5] x [0, 1] [4, 5] x [2, 3] [6, 7] x [0, 1] [6, 7] x [2, 3] | +----------------+----------------+----------------+ | | | | [0, 1] x [4, 5] [0, 1] x [6, 7] [2, 3] x [4, 5] [2, 3] x [6, 7] ==================================================================================================== 4. Pointers to entire objects (instead of pointers to parts) are stored in tree nodes, though only part of a object may be inside the block associated with a node. We will clip the object with respect to the block, to know which part of it is in the block, when necessary. 5. For the 1st part of the project, you may include the detailed description of the data structures in both programming and natural languages. Here is an example for singly linked lists: ==================================================================================================== We use two types of C structures (records in Pascal) to implement singly linked lists. The structure 'list' always keeps a pointer to the first node of the list, and it will be null if the list is empty. The 'node' data structure will have two fields, 'data' and 'next', respectively. The field 'data' stores the data in the node, it could be any other types (integer here), while the field 'next' is the pointer to the next node, which is null for the last node of the list. typedef struct node { int data; // the data stored in the node struct node *next; // a reference to the next node in the list } node; typedef struct list { node *head; // the pointer to the first node } list; // Appropriate comments in your code would be appreciated. ==================================================================================================== 6. If you have any other questions, drop me emails or come to me during the office hours. : )