当前位置: 首页 > 知识库问答 >
问题:

如何用CFTree画出一棵像样的树?

何星鹏
2023-03-14

我必须使用CFTree绘制一个可呈现的树。你可以在图片中看到

应满足此链接中陈述的所有原则。

原则是:

原则1:树的边不应该互相交叉。

原则2:相同深度的所有节点应绘制在同一水平线上。这有助于清除树的结构。

原则3:树木的绘制应尽可能窄。

原则4:父母应以子女为中心。

原则5:子树无论位于树中的哪个位置,都应以相同的方式绘制。

原则 6:父节点的子节点应均匀分布。

如何计算每个节点的X、Y位置?

共有2个答案

长孙明知
2023-03-14

我意识到这是一个古老的线程,但是对于其他任何在GOOGLE上搜索CFTREE并找到此图像并正在寻找类似图表的人,我可以推荐GraphViz作为解决方案。我已经用过它,它既简单又强大。从 ColdFusion 或任何其他语言中,您可以通过命令行调用它,让它创建一个映像,使用该映像,然后删除该映像。我提到这个软件的原因是,在如何构建这样的图表背后有一整门科学(算法)。与其自己写,不如使用这个自由软件。

要获得按父/子排序的数据,在Oracle中可以使用CONNECT BY语句。

构建数据字符串,然后调用GraphViz-例如。,

然后参考图像

并删除它:

桓兴腾
2023-03-14

你可以递归地解决这个问题。

没有图表(这会有很大帮助!)这里有一个大纲——你需要填写细节!-一种算法。该算法直接输入到答案中——预期错误。

第一:

  • 定界框 一个矩形,它包围了(子)树的绘图。
  • 锚定为连接弧将绘制的点(部分弧可能会被节点的绘制遮挡)以连接到(子)树。
  • 锚点将是边界框的坐标原点 - 因此边界框是相对于此点的测量值。
  • 边界框可能具有子项 - 子树的边界框。每个子项的位置相对于框锚点。

现在:

考虑首先绘制一个没有子节点的单个节点。基于你想要的大小,你可以为这个节点确定一个边界框。您使用的是圆,因此定位点、边界框的(0,0)坐标原点位于中心,边界框相对于该点的半径为/-1。所以你有了边界框的锚点,(0,0),它相对于锚点的大小,比如说(x最小值,x最大值,y最小值,y最大值)是(-半径,半径,-半径,半径)。您可能还希望html" target="_blank">存储节点的标签。例如,对于图中的“L”节点,你有一个表示(即和对象),包含:(0,0),(-半径,半径,-半径,半径)

现在考虑绘制一个只有一个子节点的节点。通过递归调用确定子对象的边界框。构建一个边界框,用这个框的顶部中心的节点和它正下方的子边界框包围子节点。这样你就有了边界框的锚点,它的大小与锚点相关,还有一个子元素在锚点的偏移量处。例如,对于上面的“H”节点,您有:(0,0),(xmin,xmax,ymin,ymax),“H”,1个子节点at (xoffset,yoffset),子节点is(对对象的引用)(0,0),(-半径,半径,-半径,半径)

现在考虑绘制一个具有2个子节点的节点,依此类推。

在每个节点上,从树的根进行一次递归遍历,结合子树返回的信息,生成一个描述树布局的结构。现在画出来!

希望这能帮上忙

 类似资料:
  • 我正在努力想出一种算法,它允许我绘制一个像数据结构一样的树,其中每个节点可以有0..n个子节点。对我来说,问题是,我不知道我必须放置节点多远,以便子节点不会重叠。 在本例中,“d”是“b”的子级,“g”是“e”的子,当我在给定树的总宽度的情况下,将子级均匀分布在其父级上方时,它们在x轴上重叠。 节点不以任何方式排序。所以它实际上更像一个必须看起来像树的图。

  • 有人朝他扔鲜花 有人朝他扔泥巴 他不接鲜花也不在意泥巴 他用泥巴种鲜花 要把烦心事都丢掉腾出地方装鲜花 我口袋只剩玫瑰一片 可此行又山高路远 人的内心不种满鲜花就会长满野草 贫瘠的荒漠会开满鲜花 尽头的街角有人等你回家 你是记忆中最美的春天 是我难以再回去的昨天 你像鲜花那样的绽放 让我心动不已

  • 假设给定一组树ST,每棵树的每个顶点都被标记。另外还给出了另一棵树T(也有顶点标签)。问题是如何找到ST的哪些树可以从T的根开始跨越树T,从而使生成树T的顶点标签与T的顶点标签一致。请注意,T的每个顶点的子节点要么完全覆盖,要么根本不覆盖——不允许部分覆盖子节点。换句话说:给定一棵树和以下过程:选择一个顶点,删除该顶点以下的所有顶点和边(除了顶点本身)。找到ST的那些树,这样每棵树都是用一系列应用

  • 我目前正在尝试实现一个树(不是二进制的,顺序不重要,不是定向的)数据结构。当一棵树的根与另一棵树的子节点相同时,我希望将树合并在一起 第一棵树的子树应该成为第二棵树的子树,第二棵树的子树与第一棵树的根相同。要合并的树可能更深。 我实现了像这样: 然后我有一个树列表

  • 本文向大家介绍优雅的使用javascript递归画一棵结构树示例代码,包括了优雅的使用javascript递归画一棵结构树示例代码的使用技巧和注意事项,需要的朋友参考一下 递归和尾递归 简单的说,递归就是函数自己调用自己,它做为一种算法在程序设计语言中广泛应用。其核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。一般来说,递归需要有边界条件、递归前进阶段和递归返回阶段

  • 假设我在一棵树中有一个节点,我如何获得所有的叶节点,它们的祖先是这个节点?我这样定义了TreeNode: