|
|
1
4
我想试试沃克算法。 Here's an academic paper NodeLinkTreeLayout 在里面 Prefuse . Prefuse是开源的,所以只要您遵守许可条款,就不应该有任何问题来调整代码以适应您的情况。 |
|
|
2
4
我建议按线条画这棵树。您可以通过使用某种移动的“绘图光标”来实现这一点。
你可以存储一个属性
然后,你在中间画根“在第一行”,也就是说,你只需要根的
然后,在图像上生成一个网格,使每个网格线分别对应于一条线。从左到右一步,网格线的每个交点都可以包含一个节点,每个节点都有足够的空间。
然后,遍历childs,在迭代的同时,累积childs的
为了使节点处于良好的顺序,可以考虑广度优先搜索。 我希望我的解释是清楚的,但我想如果我画一点图画会更好。
这是我们的树(
所以,你计算叶子的
然后,自下而上
所以,你从根开始(
第一个孩子
此过程确保没有重叠的节点(如果网格线彼此之间的距离足够远),但它可能会生成相当大的树形图,从而可以更有效地利用空间。 为了检测未使用的空间,可以在上述过程之后扫描线,查看是否存在未使用的网格线交点,然后可能重新排列一些节点以填充空间。 |
|
|
4
2
Graphviz和mfgraph功能强大,但它们适用于一般的图,可能对树有过多的杀伤力。 Graphic Javascript Tree with Layout 后者很旧,但它使用HTML画布和javascript,并且它解释了代码,因此代码和方法都应该是可移植的。 |
|
|
5
0
根据数据的性质 TreeMap |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |