Chinaunix首页 | 论坛 | 博客
  • 博客访问: 660552
  • 博文数量: 220
  • 博客积分: 10487
  • 博客等级: 上将
  • 技术积分: 2072
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-09 00:25
文章分类

全部博文(220)

文章存档

2012年(5)

2011年(38)

2010年(135)

2009年(42)

我的朋友

分类: Java

2009-09-20 00:29:51

本篇讨论的是多叉树的界面展示算法.

对于多叉树的数据结构我们较容易实现,如下面所示代码:

/**
 *多叉树
 * @author 3zhengtao
 */

public class Node implements TreeNode{
    Node patent=null;//父节点

    Vector<Node> children=new Vector<Node>(2);//所有子节点


但现在假设一个多叉树已生成,并且数据已填充,展示到界面的算法又如何呢?

这方面肯定有较多的实现案例,如多数图形设计工具,UML设计器,JDevelop Bpel流程设计器,JBPM工作流设计器等等,他们已经有了成熟的实现案例。但算法却很难查找得到。

下面根据本人对该问题的尝试,偶尔发现一个较有趣的实现算法思想,与大家分享。

多叉树展示的难点在于:

1.父节点坐标要由所有下层孩子结点坐标确定,下层孩子几点个数不定。

2.父节点坐标受兄弟结点坐标相互约束,横坐标不允许交叉

即要展示成如下所示:

g-01


刚开始想了一段时间,无论是自上而下还是自下而上都不好实现(大家可尝试去想想)。

后来打开Eclipse,操作资源管理器树时,突然有了一种想法,如果先把树变成一般菜单的形式,则再转换成目标形式就容易了.

g-02



以上是纵向的形式,如果转置成横向的形式,就成了如下的形式:

g-03



如果转换成了g-03的形式,要变成g-01的结果,只需从最底层结点遍历,父节点横坐标取下级孩子结点的中点就完成了。这一步便相当简单了。

那么接下来关键是如何转换成g-03的形式,其实从g-03表现图来分析也不难了,由父节点完全可以决定下级孩子结点的坐标,因此用最普通的类先序遍历一次多叉树便可以了。


阅读(848) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~