1. 程式人生 > >java基本樹型結構實現

java基本樹型結構實現

最近複習資料結構,用java寫一個樹的模板,程式碼如下,寫的比較倉促,如果有哪裡寫的不好,或者有錯誤,請在評論區提出,謝謝。

package Tree;

import java.util.ArrayList;
import java.util.List;
/**
 * 樹節點
 * @author  *
 * @param <T>
 */
public class Node<T> {

    private T cont;//節點內容
    private Node<T> parent;//父節點
    public List<Node<T>> nodeList;//子節點列表
/** * 建構函式 * @param cont * @param parent * @param nodeList */ public Node(T cont) { super(); this.cont = cont; this.parent = null; this.nodeList = new ArrayList<Node<T>>(); } public Node() { super(); // TODO Auto-generated constructor stub
} /** * get &set * @return */ public T getCont() { return cont; } public void setCont(T cont) { this.cont = cont; } public Node<T> getParent() { return parent; } public void setParent(Node<T> parent) { this
.parent = parent; } public List<Node<T>> getNodeList() { return nodeList; } public void setNodeList(List<Node<T>> nodeList) { this.nodeList = nodeList; } }

——————————————-我是分割線—————————————

package Tree;
/**
 * 樹類
 * @author  *
 * @param <T>
 */
public class Tree<T> {

    private Node<T> root;


    public Node<T> getRoot() {
        return root;
    }

    /**
     * 建構函式
     * @param root
     */
    public Tree(Node<T> root) {
        super();
    //  root.setParent(null);
        this.root = root;
    }
    public Tree(T rootCont) {
        super();
        this.root = new Node(rootCont);
    }

    /**
     * 增加新節點
     * @param curNode
     * @param newNode
     */
    public void addNewNode(Node<T> curNode,Node<T> newNode){
        if(newNode==null||curNode==null){
                return ;
        }
        newNode.setParent(curNode);
        curNode.nodeList.add(newNode);
    }
    /**
     * 遍歷
     */
    public void traversal(Node<T> root){
        System.out.println("Traversal to"+root.getCont());
        for(Node<T> tempNode:root.getNodeList() ){
            traversal(tempNode);
        }
    }
    /**
     * 查詢
     * @param root
     * @param searchcont
     * @return
     */
    private void searchHelp(Node<T> root,Node<T> result,T searchcont){
        if(root.getCont()==searchcont){
            result.setCont(root.getCont());
            result.setNodeList(root.nodeList);
            result.setParent(root.getParent());
        }

        for(Node<T> tempNode:root.getNodeList() ){
            searchHelp(tempNode,result,searchcont);
        }
    }
    public Node<T> search(Node<T> root,T searchcont){
        if(searchcont==null){return null;}
        Node<T> result=new Node<T>();
        searchHelp(root,result,searchcont);
        //System.out.println("search completed"+result.getCont());
        return result;
    }








}

——————————————-我是分割線—————————————

package Tree;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Tree<String> strTree=new Tree<String>(new Node<String>("系統管理"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "系統管理"), new Node<String>("部門管理"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "系統管理"), new Node<String>("崗位管理"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "系統管理"), new Node<String>("使用者管理"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "崗位管理"), new Node<String>("崗位新增"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "崗位管理"), new Node<String>("崗位刪除"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "使用者管理"), new Node<String>("使用者新增"));
        strTree.addNewNode(strTree.search(strTree.getRoot(), "使用者管理"), new Node<String>("使用者修改"));
        strTree.traversal(strTree.getRoot());//遍歷結果
    }

}