邋遢居

我的Java天堂

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

用Graphviz显示树

缘起

前几天不知道那根筋搭错,又拿出了大学时候买的一本讲算法的书翻了起来。想起当年学习Tree的时候,看着数据结构凭空去想那颗倒着的树。那个叫做苦啊。所以就像有没有什么办法让Tree自己画出这样的结构图出来。

动手

既然想到了,就动手做把。因为以前用Graphviz画过一点mindmap,类图之类的小东西。让我一下子就想到了,我只要能从Tree结构中方便的输出成一个能绘制出对应树结构的Graphviz脚本就可以。这应该是代价最小的做法。 呵呵,废话不多说了。看看的Tree的代码吧!

 @Override
    
public String toString() {
        StringBuffer strValue 
= new StringBuffer();
        StringBuffer rout 
=  new StringBuffer("{rank=same ");
        
        
if(getLeftTree()  != null ) {
            strValue.append(root).append(ARROW).append( getLeftTree().getTreeNode()).append(
";\r").
                        append( getLeftTree());
            rout.append(getLeftTree().getTreeNode() ).append(ARROW).append(EXTEND).append(root);
      
        }
        
        strValue.append(EXTEND).append(root).append(
"[label=\"\",width=.1,style=invis];\r");
        strValue.append(root).append(ARROW).append(EXTEND).append(root).append(
"[style=invis];\r");
     
        
if(getRightTree() != null) {
            strValue.append(root).append(ARROW).append( getRightTree().getTreeNode()).append(
";\r").
            append( getRightTree());
       
            rout.append(ARROW).append(getRightTree().getTreeNode());
        }
        strValue.append(rout).append(
" [style=invis] } ;\r");
        
return strValue.toString();
    }

产生脚本的动作全部在这里完成了。我通过如下代码创建了一颗树

       ITree<Integer> tree = new TreeImpl<Integer>(6);   
        tree.addNode(
3);
        tree.addNode(
16);
        tree.addNode(
5);
        tree.addNode(
4);
        tree.addNode(
2);
        tree.addNode(
10);
        tree.addNode(
30);

最后得到的一副如下的图

呵呵,这样的话就可以随时查看树的结构了,我们所需要做的只是把object toString一下就可以。

附上一些文件

演示的录屏文件

完整的代码 

posted on 2010-08-11 12:59 Jet Geng 阅读(3806) 评论(1)  编辑  收藏 所属分类: 开源软件使用

Feedback

# re: 用Graphviz显示树 2010-09-09 21:06 xu
代码,是单元调试的吗?运行不了,写了一个测试的main的代码.graphviz怎样在结点旁边添加标注啊?比如结点的左边.谢谢!  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: