2012-06-25 44 views
1

我想从已经聚集并保存在(离开)树中的对象绘制树状图。 Java中的我的群集对象可以用这些图片来表示。每个叶子都包含一个对象,每个节点包含其子元素之间的距离。从树中的聚类对象逐步绘制树状图的算法

http://i.stack.imgur.com/6nktv.png

现在,我要绘制树形图阶梯,所以第一对象1和2应绘制,则对象3应该被添加到那些。然后将5和6等连接到一切连接的地方。我已经有了所有的工具来轻松地绘制这些东西,但是我无法找到正确穿过树的有效方法。

这应该是迄今为止在该示例中的结果(编辑:有一个错误,从5到6的距离现在看起来比从3到1的距离要小2,但在我的示例中不是这种情况!): http://i.stack.imgur.com/gecAF.png

有没有人有这个递归算法的一些技巧?

回答

0

您首先渲染深度 - 您可能会发现需要跟踪深度才能使布局正常工作 - 同时请注意,您还必须绘制非终端笔记(“*”在3之前绘制)

基本上

draw(node) 
{ 
    if(hasleft) draw(left) 
    if(hasright) draw(right) 
    drawme() 
} 

这确实承担二叉树,但是这是你画什么 - 这是会得到,因为布局问题变得更复杂了 - 你真的要考虑拉宽首先从上往下,它使布局减少很多痛苦

+0

对于出衬里部分,我认为从底部开始更容易(我知道我必须从添加图片中的标签开始)。树并不完全是一个二叉搜索树,即两棵树可以再次聚集到一棵树,那么它现在不再是我想的了? – simP

+0

啊,改变布局会使事情变得简单但并不完美 - 但是如果你从不打算标记除终端节点以外的任何东西 - 但是第一个布局更好 - 你确定第二个图不是二叉树,因为根元素有4个子元素 - 但是请注意,对于任何父行,您需要知道子元素的总数,以便计算父元素的垂直偏移量 –

+0

我不确定您的意思,但第一个图片不是一个布局,它只是一个可视化表示,使用Java中的树类的Paint和其中的一些数据进行可视化表示,以清楚说明我的聚类对象是什么样的。 – simP