2014-12-03 64 views
0

我正在開發一個j2ee項目,我需要一個動態菜單。 我有數據庫中的數據。現在我想製作一棵樹並遍歷樹的預訂。 你能幫我怎麼做嗎?如何製作n-tree樹並預先遍歷

回答

1

這是我的工作代碼,用於創建樹並遍歷預訂和有序。

希望它能幫助你。

public class NaryTree { 
    static HashMap<String, NaryTree.Node> tree = new HashMap<String, NaryTree.Node>(); 

    public static void main(String[] args) { 
     new NaryTree().makeTree(); 
     traverseFrom(tree.get("000")); 
    } 

    public static void traverseFrom(Node rootNode) {  
     if(rootNode.getChildren().size()!= 0) { 
      for (Node pNode : rootNode.getChildren()) {    
       System.out.println(" Lavel:"+pNode.lavel+" - Node Value:"+pNode.val); // preorder traverse    
       traverseFrom(pNode); 
       //System.out.print(" Lavel :"+pNode.lavel+"- Node Value :"+pNode.val); // preorder traverse 
      }   
     }  
    } 

    private void makeTree() { 

     Node newNode = new Node("000", null, new ArrayList<NaryTree.Node>()); 
     newNode.setLavel(0); 
     tree.put("000", newNode);  
     //newNode.getParent().getChildren().add(newNode); 

     newNode = new Node("101", tree.get("000"), new ArrayList<NaryTree.Node>()); 
     tree.put("101", newNode); 
     newNode.getParent().getChildren().add(newNode); 

     newNode = new Node("102", tree.get("000"), new ArrayList<NaryTree.Node>()); 
     tree.put("102", newNode); 
     newNode.getParent().getChildren().add(newNode); 

     newNode = new Node("103", tree.get("000"), new ArrayList<NaryTree.Node>()); 
     tree.put("103", newNode); 
     newNode.getParent().getChildren().add(newNode); 

     newNode = new Node("201", tree.get("101"), new ArrayList<NaryTree.Node>()); 
     tree.put("201", newNode); 
     newNode.getParent().getChildren().add(newNode); 

     newNode = new Node("202", tree.get("101"), new ArrayList<NaryTree.Node>()); 
     tree.put("202", newNode); 
     newNode.getParent().getChildren().add(newNode); 

     newNode = new Node("205", tree.get("103"), new ArrayList<NaryTree.Node>()); 
     tree.put("205", newNode); 
     newNode.getParent().getChildren().add(newNode); 

     newNode = new Node("301", tree.get("201"), new ArrayList<NaryTree.Node>()); 
     tree.put("301", newNode); 
     newNode.getParent().getChildren().add(newNode); 

     newNode = new Node("104", tree.get("000"), new ArrayList<NaryTree.Node>()); 
     tree.put("104", newNode); 
     newNode.getParent().getChildren().add(newNode); 
    } 

private class Node { 

     private String val; 
     private int lavel; 
     private Node parent; 
     private List<Node> children; 

     public Node(String val, Node parent, List<Node> children) { 
      this.val = val; 
      this.parent = parent; 
      this.children = children; 
      if(parent!=null) 
       this.lavel = (int) parent.getLavel()+1; 
      else 
       this.lavel = 0; 
     } 

     public String getVal() { 
      return val; 
     } 
     public void setVal(String val) { 
      this.val = val; 
     } 
     public Node getParent() { 
      return parent; 
     } 
     public void setParent(Node parent) { 
      this.parent = parent; 
     } 
     public List<Node> getChildren() { 
      return children; 
     } 
     public void setChildren(List<Node> children) { 
      this.children = children; 
     } 

     public int getLavel() { 
      return lavel; 
     } 

     public void setLavel(int lavel) { 
      this.lavel = lavel; 
     } 
    } 
} 
+1

不錯的代碼來製作一棵樹。但我需要製作html ul和ol列表 – Samim 2014-12-03 04:18:27

0

看看Primefaces的樹組件,特別是java代碼和文檔:p:tree。它顯示了哪些對象被用作樹節點以及樹是如何初始化的。希望這可以幫助。

+0

謝謝。我會通過 – Samim 2014-12-03 04:19:02