家谱显示

TCM*_*TCM 4 algorithm family-tree

我正在创建一个家谱计划.我的问题是如何定位节点?最初我将根定位在我的屏幕的中心,如果它是一个完美的二叉树并且水平非常低,它可以正常工作.然而,情况并非最常见.这是一个示例树: -

            A
        B       C
    D   E   F   I   J
K   L               N   O
Run Code Online (Sandbox Code Playgroud)

如您所见,主要问题是关于节点的位置.如果一个节点有很多子节点并且它的相邻节点也有很多子节点,它们往往会重叠.(主要问题)我在Silverlight中使用Canvas对节点进行绝对定位.如果您不是Silverlight开发人员,则可能不会烦恼Silverlight和Canvas部分.我只需要如何定位节点的逻辑.

通过知道树的级别总数,树的高度可以很容易地计算出来,但是树的宽度让我很烦恼.如何计算树的宽度(画布的总宽度)

有人可以给我一些关于如何设置画布宽度的一般指导,以及哪些逻辑对于节点的定位是完美的.

注意: -我不是要求整个算法,这不是我的功课.我已经有了算法和数据库.我只需要节点定位部分的指南.

提前致谢 :)

nin*_*aaa 5

如果实现了一个函数:width(node)对于这个树的任意节点,很容易定位每个节点

这个函数可以递归地定义:
- 对于高度为1的树,树就是这个节点的长度
- 对于高度大于1的树,这是该节点的所有直接子节点的长度之和(加上一些空格)那些)