邋遢居

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

          Feedback

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

          主站蜘蛛池模板: 和平县| 阆中市| 华蓥市| 乐业县| 阿瓦提县| 嘉兴市| 胶州市| 确山县| 普兰店市| 龙井市| 尚志市| 柏乡县| 高清| 许昌县| 虎林市| 南木林县| 肇庆市| 莲花县| 白沙| 滕州市| 拉萨市| 临汾市| 盐源县| 宜兰市| 如东县| 彭泽县| 武冈市| 贵南县| 新平| 阿拉善盟| 兰考县| 巴东县| 枝江市| 石门县| 安阳市| 桦川县| 奇台县| 泸州市| 旬邑县| 乐业县| 奉贤区|