如何制作一个n-ary树和预先遍历遍历

时间:2014-12-03 04:06:02

标签: java

我正在开发一个需要动态菜单的j2ee项目。 我有数据库中的数据。现在我想制作一棵树并遍历树预订。 你能帮帮我怎么做吗?

2 个答案:

答案 0 :(得分:2)

这是我的工作代码,用于创建树并遍历预订和有序。

希望它会对你有所帮助。

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 :(得分:0)

看看Primefaces&#39;树组件,尤其是java代码和文档:p:tree。在那里显示了什么对象用作树节点以及如何初始化树。希望这会有所帮助。

相关问题