邋遢居

          我的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();
              }

          產生腳本的動作全部在這里完成了。我通過如下代碼創(chuàng)建了一顆樹

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

          Feedback

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

          主站蜘蛛池模板: 上杭县| 衡阳市| 禹州市| 保康县| 乌什县| 大兴区| 柳河县| 高平市| 海淀区| 江城| 牟定县| 那坡县| 玉山县| 房产| 荔波县| 建昌县| 钟山县| 灵丘县| 郯城县| 石河子市| 伊川县| 中宁县| 额济纳旗| 连山| 突泉县| 浦城县| 昌乐县| 兴宁市| 百色市| 弥渡县| 武安市| 濉溪县| 三明市| 奉贤区| 龙口市| 亳州市| 康保县| 南丹县| 高邮市| 岳普湖县| 英山县|