1. TreeNode.class
public class TreeNode {
MyTree tree;
TreeNode parentNode;
int id;
String name;
public TreeNode(MyTree tree){
this.tree = tree;
this.tree.addNode(this);
}
//为节点设置父节点
public void setParentNode(TreeNode parentNode){
this.parentNode = parentNode;
}
//添加子节点
public void add(TreeNode childNode){
childNode.setParentNode(this);
}
//获取当前节点下的子节点
public List<TreeNode> getChildNode(){
return tree.getChildNode(this);
}
//返回当前节点是否为空节点
public boolean isEmpty(){
return tree.isEmply(this);
}
//删除当前节点下的指定子节点
public TreeNode remove(TreeNode childNode){
if(childNode.parentNode == this && childNode.isEmpty()){
childNode.parentNode = null;
return tree.removeNode(childNode);
}
return null;
}
//重写toString
public String toString(){
return "\n TreeNode [prentNode=" + (parentNode!=null?parentNode.name:"null") + ", id=" + id + ", name=" + name + ",\n childNode["+getChildNode()+"]]";
}
}
2. MyTree.class
public class MyTree {
List<TreeNode> treeNodeList;
TreeNode rootNode;
public MyTree() {
treeNodeList = new ArrayList<TreeNode>();
rootNode = new TreeNode(this);
treeNodeList.add(rootNode);
}
//获取根节点
public TreeNode getRootNode(){
return treeNodeList.get(0);
}
//通过主键获取一个节点
public TreeNode getNode(int id){
for(TreeNode node : treeNodeList){
if(node.id==id){
return node;
}
}
return null;
}
//为树添加节点
public void addNode(TreeNode node){
treeNodeList.add(node);
}
//删除指定节点
public TreeNode removeNode(TreeNode node){
if(treeNodeList.remove(node)){
return node;
}
return null;
}
//获取指定节点的子节点
public List<TreeNode> getChildNode(TreeNode parentNode){
List<TreeNode> result = new ArrayList<TreeNode>();
for(TreeNode node :treeNodeList){
if(node.parentNode == parentNode){
result.add(node);
}
}
return result;
}
//判断节点是否是最终的,没有子节点的
public boolean isEmply(TreeNode parentNode){
for(TreeNode node : treeNodeList){
if(node.parentNode == parentNode){
return false;
}
}
return true;
}
//重写tostring
public String toString(){
return "MyTree [rootNode["+rootNode+"]]";
}
3.在MyTree中添加测试
@Test
public void DemoTest(){
rootNode.name = "父级";
rootNode.id = 0;
TreeNode childNode1 = new TreeNode(this);
childNode1.name = "子级0_1";
childNode1.id = 1;
rootNode.add(childNode1);
TreeNode childNode2 = new TreeNode(this);
childNode2.name = "子级0_2";
childNode2.id = 2;
rootNode.add(childNode2);
TreeNode childNode3 = new TreeNode(this);
childNode3.name = "子级0_3";
childNode3.id = 3;
rootNode.add(childNode3);
TreeNode childNode4 = new TreeNode(this);
childNode4.name = "孙子级1_1";
childNode4.id = 4;
childNode1.add(childNode4);
TreeNode childNode5 = new TreeNode(this);
childNode5.name = "孙子级1_2";
childNode5.id = 5;
childNode1.add(childNode5);
TreeNode childNode6 = new TreeNode(this);
childNode6.name = "孙子级1_3";
childNode6.id = 6;
childNode1.add(childNode6);
TreeNode childNode7 = new TreeNode(this);
childNode7.name = "孙子级2_1";
childNode7.id = 7;
childNode2.add(childNode7);
TreeNode childNode8 = new TreeNode(this);
childNode8.name = "孙子级2_2";
childNode8.id = 8;
childNode2.add(childNode8);
TreeNode childNode9 = new TreeNode(this);
childNode9.name = "孙子级3_1";
childNode9.id = 9;
childNode3.add(childNode9);
TreeNode childNode10 = new TreeNode(this);
childNode10.name = "孙子级3_2";
childNode10.id = 10;
childNode3.add(childNode10);
System.out.println(rootNode);
System.out.println();
System.out.println(childNode1);
System.out.println();
System.out.println(getChildNode(childNode1));
System.out.println();
System.out.println(childNode1.getChildNode());
System.out.println();
System.out.println(childNode1.remove(childNode6));
System.out.println();
System.out.println(childNode1.remove(childNode4));
System.out.println();
System.out.println(childNode1.getChildNode());
}