Binääripuun piirtäminen (Java)

Binääripuun rakenteen hahmottaminen on vähintäänkin vaikeaa katsomalla koodia, joka muodostaa binääripuun.

Apuun tulee seuraava koodi, joka piirtää binääripuun AWT- ja Swing-kirjastojen avulla. Kuten muutkin binääripuuhun liittyvät asiat, piirtäminen onnistuu kätevästi rekursion avulla.

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

public class DrawTree extends JFrame {
    int width = 800;
    int height = 500;

    public DrawTree() {
         setSize(width,height);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setResizable(false);
         setLocationRelativeTo(null);
         setVisible(true);
    }

    public static void main(String[] args) {
        new DrawTree();
    }

    int count(Node node) {
        if (node == null) return 0;
        return count(node.left)+count(node.right)+1;
    }

    void drawTree(Node node, int x, int y, Graphics g) {
        if (node == null) return;
        g.fillOval(x-5,y-5,10,10);
        int space, newX, newY;
        if (node.left != null) {
            space = count(node.left.right);
            newX = x-(space+1)*30; newY = y+40;
            g.drawLine(x,y,newX,newY);
            drawTree(node.left,newX,newY,g);
        }
        if (node.right != null) {
            space = count(node.right.left);
            newX = x+(space+1)*30; newY = y+40;
            g.drawLine(x,y,newX,newY);
            drawTree(node.right,newX,newY,g);
        }
    }

    public void paint(Graphics g) {
        // tässä on binääripuu, joka halutaan piirtää
        Node tree = new Node(
            new Node(new Node(null,null),new Node(null,null)),
            new Node(new Node(null,null),new Node(null,null))
        );
        g.setColor(Color.BLACK);
        drawTree(tree,width/2,50,g);
    }
}