// BinaryTreeApplet
// Zum Zeichnen eines Binaerbaums der Klasse "BinaryTree"
// von Daniel Fader, Axel Rottmann, SS 2009

import java.awt.*;
import javax.swing.*;

public class BinaryTreeApplet extends JPanel {

    public BinaryTreeApplet(int w, BinaryTree bt) {

	setBackground(new Color(255,255,0));  
	width = w;
	this.bt = bt;
	offs = 5;
	size = 35;
 
	repaint();
    }

    // Ueberladene Standardmethode
    // Wird mit "repaint();" aufgerufen
    // und zeichnet den Baum
    public void paint(Graphics g) {

	super.paint(g);
	drawTree(g, bt, 0, width, 1);
    }


    private void drawTree(Graphics g, BinaryTree b, int rangeLow, int rangeHigh, int level) {

	int mid = (rangeHigh-rangeLow)/2;
	g.drawString(Integer.toString(b.getContent()), rangeLow+mid, level*size);
      
	if (b.getLeft() != null) {

	    g.drawLine(rangeLow+mid-offs,
		       level*size+offs, 
		       rangeLow+mid/2, 
		       (level+1)*size-size/2);
	    drawTree(g, b.getLeft(), rangeLow, rangeLow+mid, level+1);
	}
	if (b.getRight() != null) {

	    g.drawLine(rangeLow+mid+offs, 
		       level*size+offs, 
		       rangeLow+mid + mid/2,
		       (level+1)*size-size/2);
	    drawTree(g, b.getRight(), rangeLow+mid, rangeHigh, level+1);
	}
    }

    private BinaryTree bt;
    private int width;
    private int offs;
    private int size;
    
}