/*************************************************************************
* Name:
* NetID:
* Precept:
*
* Description: Plots an H-tree of order n, where n is args[0].
*************************************************************************/
public class Htree {
// plots an "H" centered on (x, y), using 3 lines, each of length size
public static void drawH(double x, double y, double size) {
// compute the coordinates of the 4 tips of the H
double x0 = x - size/2; double y0 = y - size/2;
double x1 = x + size/2; double y1 = y + size/2;
// draw the 3 line segments of the "H"
StdDraw.line(x0, y0, x0, y1); // left vertical segment of the "H"
StdDraw.line(x1, y0, x1, y1); // right vertical segment of the "H"
StdDraw.line(x0, y, x1, y); // connect the two vertical segments of the "H"
}
// plot an H-tree of order n, centered at (x, y) of the given side length
public static void draw(int n, double x, double y, double size) {
if (n == 0) return;
drawH(x, y, size);
// compute x- and y-coordinates of the 4 half-size H-trees
double x0 = x - size/2; double y0 = y - size/2;
double x1 = x + size/2; double y1 = y + size/2;
// recursively draw 4 half-size H-trees of order n-1
draw(n-1, x0, y0, size/2); // lower left H-tree
draw(n-1, x0, y1, size/2); // upper left H-tree
draw(n-1, x1, y0, size/2); // lower right H-tree
draw(n-1, x1, y1, size/2); // upper right H-tree
}
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
double x = 0.5, y = 0.5; // center of H-tree
double size = 0.5; // side length of H-tree
draw(n, x, y, size);
}
}