邋遢居

          我的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 閱讀(3828) 評論(1)  編輯  收藏 所屬分類: 開源軟件使用

          Feedback

          # re: 用Graphviz顯示樹 2010-09-09 21:06 xu
          代碼,是單元調試的嗎?運行不了,寫了一個測試的main的代碼.graphviz怎樣在結點旁邊添加標注啊?比如結點的左邊.謝謝!  回復  更多評論
            

          主站蜘蛛池模板: 平和县| 如东县| 封开县| 工布江达县| 阿瓦提县| 石阡县| 郎溪县| 梁平县| 齐齐哈尔市| 天峨县| 佳木斯市| 天台县| 威海市| 拜城县| 体育| 长岭县| 高邑县| 乌鲁木齐县| 长春市| 疏附县| 安顺市| 卢氏县| 泗水县| 来安县| 洛川县| 凤凰县| 航空| 德保县| 赞皇县| 肇庆市| 尉犁县| 城口县| 东宁县| 沈丘县| 酉阳| 莆田市| 唐河县| 渭南市| 甘孜| 邯郸市| 澜沧|