java基本樹型結構實現
阿新 • • 發佈:2018-12-25
最近複習資料結構,用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());//遍歷結果
}
}