邋遢居

          我的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怎樣在結點旁邊添加標注啊?比如結點的左邊.謝謝!  回復  更多評論
            

          主站蜘蛛池模板: 织金县| 普安县| 泽库县| 平顶山市| 师宗县| 南城县| 宁河县| 临海市| 磴口县| 新安县| 三原县| 静宁县| 龙海市| 通许县| 六盘水市| 休宁县| 临朐县| 建德市| 日土县| 蓝山县| 临高县| 安义县| 沛县| 城步| 灵山县| 诸暨市| 河东区| 固原市| 雷波县| 姜堰市| 湟中县| 宁都县| 会宁县| 望城县| 西青区| 珲春市| 安仁县| 桐梓县| 乌鲁木齐市| 彭州市| 临漳县|