首页 文章

家谱显示

提问于
浏览
4

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

A
        B       C
    D   E   F   I   J
K   L               N   O

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

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

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

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

提前致谢 :)

3 回答

  • 0

    如果为该树的任意节点实现函数: width(node) ,则很容易定位每个节点

    可以递归地定义此函数:

    • 对于高度为1的树,树正好是此节点的长度
    • 对于高度大于1的树,这是此节点的所有直接子节点的长度总和(加上这些节点之间的一些空格)
  • 0

    如果你想猜测画布的宽度,我建议从树的最宽层开始 . 您可以通过遍历树广度优先计算 . 将该级别的节点数乘以每个节点所需的横向空间量,并获得所需的画布宽度 .

    但是,这并不能保证最宽级别的相邻节点不会有很多子节点 . 因此,为了执行没有重叠的间距,首先将树的叶子定位在最深层,然后向后移动树,在上面添加父母并将叶子放入间隙和侧面 .

  • 5

    我建议放大和缩小功能,以便整理GUI Real Estate .

    一个有许多孩子的节点可以被分组,一个特殊的图标来表示它可以放大到下一个级别,我会感觉很好,因为家庭成长,因为用户可以首先获得大图,然后可以放大任何分支他祝福 .

    从谷歌 Map 的UI获取提示可能会有所帮助 .

相关问题