最近复习数据结构,用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());//遍历结果
}
}