2

我正在尝试从节点列表中手动绘制分层树。每个节点都是一个对象,其信息包含在方法中,例如:

node.getParent()
node.getChildrenCount()

我遇到的问题是绘制树的金字塔结构(正确缩进子节点),根在中间,子节点对称地向下传播。

private void drawTree(Graphics2D graphics) {
        int width = 110;
        int height = 40;
        int y = 10;
        for (int i = 0, nodesSize = nodes.size(); i < nodesSize; i++) {
            AttributedNode node = nodes.get(i);
            Rectangle rectangle;
            if (i == 1) { // draw root
                rectangle = new Rectangle(getRootX(), y, width, height);
            } else {
                if (node.getChildCount() == 1) { // if one child draw beneath
                    rectangle = new Rectangle(getRootX(), y, width, height);
                } else {
                    rectangle = new Rectangle(getRootX() + 40, y, width, height);
                }
            }
            y += 50;
            graphics.draw(rectangle);
            addStringToRectangle(graphics, rectangle, node.getText());
        }
    }

到目前为止我所拥有的:http: //img10.imageshack.us/img10/8822/rcsi.png
我想要实现的目标:http: //img703.imageshack.us/img703/8416/1o05.png
任何帮助都会受到赞赏。

4

1 回答 1

0

递归可能会为您的问题提供一个很好的解决方案。

public void drawTree(Node node, Graphics2D graphics) {
    if(node != null){
        //drawTree(node.leftChild);
        //drawTree(node.rightChild);
        //draw this node.
    }
} 

我使用了一些伪代码,但如果你开发了这个想法,它可能会有所帮助。我建议考虑把它画在纸上干运行这个简单的想法。阅读预购,按订单和后订单:)

于 2014-07-09T20:24:08.530 回答