【问题标题】:algorithm for drawing dendrogram stepwise from clustered objects in a tree从树中的聚类对象逐步绘制树状图的算法
【发布时间】:2012-06-27 01:29:30
【问题描述】:

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

现在,我想逐步绘制树状图,因此首先应绘制对象 1 和 2,然后应将对象 3 添加到其中。然后 5 和 6 一起等......直到一切都连接起来。我已经拥有所有工具来轻松绘制它,但我找不到正确穿过树的有效方法。

这应该是示例中到目前为止的结果(编辑:有一个错误,从 5 到 6 的距离现在看起来小于从 3 到 1&2 的距离,但在我的示例中并非如此!):

有人对这种递归算法有一些提示吗?

【问题讨论】:

    标签: java recursion tree cluster-analysis dendrogram


    【解决方案1】:

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

    基本上

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

    这确实假设了一棵二叉树,但这就是您绘制的内容-由于布局问题,这将变得更加复杂-您真的想首先考虑从上到下绘制宽度,它使布局少了很多痛苦

    【讨论】:

    • 对于大纲部分,我认为从底部开始更容易(我知道我必须从添加图片中的标签旁边开始)。这棵树并不完全是一棵二叉搜索树,即两棵树可以再次聚集成一棵树,那么我认为它不再是了吗?
    • 啊,改变布局会让事情变得更容易,但并不完美 - 但是如果你从不打算标记终端节点以外的任何东西,这相当简单 - 但第一个布局要好得多 - 你是正确的,第二个图不是二叉树,因为根元素有 4 个子元素 - 但是请注意,对于任何父行,您需要知道子元素的总数才能计算父 lint 的垂直偏移量
    • 我不确定你是不是这个意思,但第一张图片不是布局,它只是用我的 Java 中的树类绘制的视觉表示,其中包含一些数据,以便清楚我的集群对象是什么样的。
    猜你喜欢
    • 2022-01-19
    • 2021-06-07
    • 2015-12-14
    • 2020-06-20
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2017-05-18
    • 2018-03-06
    相关资源
    最近更新 更多