1. 程式人生 > >用Java2D畫出樹的結構_v0.1.0

用Java2D畫出樹的結構_v0.1.0

原文地址:http://blog.csdn.net/kakashi8841/article/details/5996778

先看效果圖:

定義樹的資料結構

  1. /** 
  2.  * 2010-11-8 
  3.  * John 
  4.  */
  5. package tree;  
  6. import java.util.ArrayList;  
  7. import java.util.List;  
  8. /** 
  9.  * 樹的結構 
  10.  * @author John 
  11.  * 
  12.  */
  13. publicclass Node {  
  14.     private String name;    //該結點名字
  15.     privateint layer = 0;  //該結點層級
  16.     private List<Node> childs = 
    null//儲存該結點的孩子
  17.     public Node(String name){  
  18.         this.name = name;  
  19.     }  
  20.     /** 
  21.      * 增加一個孩子 
  22.      * @param n 要作為孩子增加的結點 
  23.      */
  24.     publicvoid add(Node n){  
  25.         if(childs == null)  
  26.             childs = new ArrayList<Node>();  
  27.         n.setLayer(layer+1);  
  28.         setChildLayout(n);  
  29.         childs.add(n);  
  30.     }  
  31.     /** 
  32.      * 遞迴設定孩子的層級 
  33.      * @param n 
  34.      */
  35.     privatevoid setChildLayout(Node n){  
  36.         if(n.hasChild()){  
  37.             List<Node> c = n.getChilds();  
  38.             for(Node node : c){  
  39.                 node.setLayer(node.getLayer()+1);  
  40.                 setChildLayout(node);  
  41.             }  
  42.         }  
  43.     }  
  44.     /** 
  45.      * 獲取結點名 
  46.      * @return 結點名 
  47.      */
  48.     public String getName() {  
  49.         return name;  
  50.     }  
  51.     /** 
  52.      * 設定結點名 
  53.      * @param name 結點名 
  54.      */
  55.     publicvoid setName(String name) {  
  56.         this.name = name;  
  57.     }     
  58.     /** 
  59.      * 獲取該結點的層級 
  60.      * @return 該結點的層級 
  61.      */
  62.     publicint getLayer() {  
  63.         return layer;  
  64.     }  
  65.     /** 
  66.      * 設定該結點的層級 
  67.      * @param layer 該結點的層級 
  68.      */
  69.     publicvoid setLayer(int layer) {  
  70.         this.layer = layer;  
  71.     }  
  72.     /** 
  73.      * 獲取該結點的孩子 
  74.      * @return 所有孩子結點 
  75.      */
  76.     public List<Node> getChilds() {  
  77.         return childs;  
  78.     }  
  79.     /** 
  80.      * 檢查是否存在孩子 
  81.      * @return 是則返回true,否則返回false 
  82.      */
  83.     publicboolean hasChild(){  
  84.         return childs == null ? false : true;  
  85.     }  
  86.     /** 
  87.      * 遞迴列印所有的結點(包括子結點) 
  88.      * @param n 要列印的根結點 
  89.      */
  90.     publicvoid printAllNode(Node n){  
  91.         System.out.println(n);  
  92.         if(n.hasChild()){  
  93.             List<Node> c = n.getChilds();  
  94.             for(Node node : c){  
  95.                 printAllNode(node);  
  96.             }  
  97.         }  
  98.     }  
  99.     public String getAllNodeName(Node n){  
  100.         String s = n.toString()+"/n";  
  101.         if(n.hasChild()){  
  102.             List<Node> c = n.getChilds();  
  103.             for(Node node : c){  
  104.                 s+=getAllNodeName(node)+"/n";  
  105.             }  
  106.         }  
  107.         return s;  
  108.     }  
  109.     public String toString(){  
  110.         return layer+"層/t: "+name;  
  111.     }  
  112. }  

Node的測試類:

  1. /** 
  2.  * 2010-11-9 
  3.  * John 
  4.  */
  5. 相關推薦

    Java2D結構_v0.1.0

    原文地址:http://blog.csdn.net/kakashi8841/article/details/5996778 先看效果圖: 定義樹的資料結構 /**   

    Java2D結構(是不是感覺標題很熟悉)

    前言 感覺標題很熟悉的就對了,因為其實這是我碰到了一個作業要畫出樹,然後就百度了一下,參考了另一位學者kakashi8841(姑且就這麼叫吧)的文章和程式碼,才做完了作業。下面是連結: 本文的內容就是改進了原文的Bug,所以說大部分和原文很像。

    matlab概率密度分佈圖1

    比方說,你的資料在y這個陣列中. y=rand(1,3000) ymin=min(y); ymax=max(y); x=linspace(ymin,ymax,20);%將最大最小區間分成20個等分點(19等分),然後分別計算各個區間的個數 yy=hist(y,x);

    div 三角形

    gpo 元素 如果 圖片 代碼 solid pos adding pad 畫三角形的代碼: border-top: 10px solid rgba(0,0,0,0); border-bottom: 10px solid rgba(0,0,0,0); bor

    mybatis 實現遞迴查詢結構節點

    mybatis 實現遞迴查詢出樹結構節點 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.

    ## Python等高線,並且設定xy軸刻度標籤

    import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(9, 6)) # 定義等高線高度函式 def f(x, y): return (pow(x,3)+pow(y,3)-15*x-20*

    gnuplotc產生資料的波形圖

    文章目錄資料程式碼畫圖問題修正 資料 用c產生表示式為: s(t)=sin(pit)+2cos(pit)的資料,輸出為t跟s。 程式碼 #include<stdio.h> #include<math.h> #define pi 3.14

    CSS三角形

    隨著css3.0的出現,我們可以畫出越來越多比較新穎的圖形,這裡我介紹一下用css3畫出三角形。 首先我們給個div <div id="triangle"></div> 下面就是我們的css程式碼, 先看個例子 #trian

    Java實現簡單結構

    Node實體: package treeTest; import java.io.Serializable; import java.util.List; /** * ClassName: No

    OpenCVCvBox2D結構(轉)

    對給定的 2D 點集,尋找最小面積的包圍矩形,使用函式: CvBox2D cvMinAreaRect2( const CvArr* points, CvMemStorage* storage=NULL ); points 點序列或點集陣列 storage 可選的臨時

    Python平滑的曲線(插值法)

    實現所需的庫 numpy、scipy、matplotlib 實現所需的方法 插值 nearest:最鄰近插值法 zero:階梯插值 slinear:線性插值 quadratic、cubic:2、3階B樣條曲線插值 擬合和插值的區別 簡

    函式可愛的卡通貓

    函式共 268 頁 11783 行,前後折騰了近半個月。可惜還是有些小瑕疵,不然文章標題就該叫《震驚!死宅竟用三角函式畫出可愛的老婆》了...... 用函式畫的 Pusheen 畫 Pusheen 的函式 前言 在推上看到這樣一張圖: Twitter截圖 覺著用函式畫妹子什麼的好有趣,決

    第16周 點結構1.0

    問題: 請編寫程式,輸入一點的橫縱座標,輸出該點到原點的距離 #include <stdio.h> #include <stdlib.h> #include<math.h> struct Point { float x; /

    ROC曲線是通過樣本點分類概率的 例如某一個sample預測為1概率為0.6 預測為0概率0.4這樣出來,此外如果曲線不是特別平滑的話,那麽很可能存在過擬合的情況

    pro TE 直線 算法 false .net ear 明顯 ever ROC和AUC介紹以及如何計算AUC from:http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC(Receiver Operati

    百度地圖API-調後臺接口點位

    調用 doctype ets 地圖展示 展示 char title polyline 1.10 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" co

    動畫的方式任意的路徑(直線、曲線、折現)

    pub length 資料 new object n) 整體 for duration 原文:用動畫的方式畫出任意的路徑(直線、曲線、折現) 版權聲明:本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載

    Effective前端1---chapter 2 CSS一個三角形

    -- 前端 highlight ive 類元 light sha 畫法 兩個 1.CSS畫三角形的畫法 第一步:三角形可以用border畫出來,首先一個有四個border的div長這樣: <div class="triangle"></div>

    一個好的線上思維導圖工具,擁有靈感快速精品思維導圖

      一般情況下繪製思維導圖有兩種方法,一種是手繪,另一中是使用思維導圖工具, 線上思維導圖模板優點是不用下載,在迅捷思維導圖中選擇好模板便可直接開啟使用再次編輯,不用考慮格式和軟體安裝的問題。   工具:   迅捷思維導圖 www.siweidaotu.com   推薦理由: 免費建立思維

    資料結構——3.1的表示

    一、引言 層次結構舉例 家譜、城市(鄉鎮),檔案管理系統等 為什麼用層次結構呢? 分層次組織在管理上具有更高的效率 查詢 靜態查詢:對查詢的集合沒有插入和刪除操作,只有查詢 動態查詢:對查詢的集合除查詢外,還可能發生插入和刪除 二分查詢的啟示 例如11個元素的二