Java 多叉树的实现,完成树的初始化和遍历
Java 多叉树的实现,完成树的初始化和遍历。包括两个文件(TreeNode.java和TreeHelper.java)TreeNode类完成树节点的数据结构,TreeHelper类经过输入一个TreeNode列表,生成一颗有一个树根的树!其它函数接口本身看看就明白了,但愿对你有帮助。一:树节点的定义(TreeNode.java)Java代码package com.tree;import java.util.List;import java.util.ArrayList;import java.io.Serializable;public class TreeNode implements Serializable {private int parentId;private int selfId;protected String nodeName;protected Object obj;protected TreeNode parentNode;protected List<TreeNode> childList;public TreeNode() {initChildList();}public TreeNode(TreeNode parentNode) {this.getParentNode();initChildList();}public boolean isLeaf() {if (childList == null) {return true;} else {if (childList.isEmpty()) {return true;} else {return false;}}}/* 插入一个child节点到当前节点中 */public void addChildNode(TreeNode treeNode) {initChildList();childList.add(treeNode);}public void initChildList() {if (childList == null)childList = new ArrayList<TreeNode>();}public boolean isValidTree() {return true;}/* 返回当前节点的父辈节点集合 */public List<TreeNode> getElders() {List<TreeNode> elderList = new ArrayList<TreeNode>();TreeNode parentNode = this.getParentNode();if (parentNode == null) {return elderList;} else {elderList.add(parentNode);elderList.addAll(parentNode.getElders());return elderList;}}/* 返回当前节点的晚辈集合 */public List<TreeNode> getJuniors() {List<TreeNode> juniorList = new ArrayList<TreeNode>();List<TreeNode> childList = this.getChildList();if (childList == null) {return juniorList;} else {int childNumber = childList.size();for (int i = 0; i < childNumber; i++) {TreeNode junior = childList.get(i);juniorList.add(junior);juniorList.addAll(junior.getJuniors());}return juniorList;}}/* 返回当前节点的孩子集合 */public List<TreeNode> getChildList() {return childList;}/* 删除节点和它下面的晚辈 */public void deleteNode() {TreeNode parentNode = this.getParentNode();int id = this.getSelfId();if (parentNode != null) {parentNode.deleteChildNode(id);}}/* 删除当前节点的某个子节点 */public void deleteChildNode(int childId) {List<TreeNode> childList = this.getChildList();int childNumber = childList.size();for (int i = 0; i < childNumber; i++) {TreeNode child = childList.get(i);if (child.getSelfId() == childId) {childList.remove(i);return;}}}/* 动态的插入一个新的节点到当前树中 */public boolean insertJuniorNode(TreeNode treeNode) {int juniorParentId = treeNode.getParentId();if (this.parentId == juniorParentId) {addChildNode(treeNode);return true;} else {List<TreeNode> childList = this.getChildList();int childNumber = childList.size();boolean insertFlag;for (int i = 0; i < childNumber; i++) {TreeNode childNode = childList.get(i);insertFlag = childNode.insertJuniorNode(treeNode);if (insertFlag == true)return true;}return false;}}/* 找到一颗树中某个节点 */public TreeNode findTreeNodeById(int id) {if (this.selfId == id)return this;if (childList.isEmpty() || childList == null) {return null;} else {int childNumber = childList.size();for (int i = 0; i < childNumber; i++) {TreeNode child = childList.get(i);TreeNode resultNode = child.findTreeNodeById(id);if (resultNode != null) {return resultNode;}}return null;}}/* 遍历一棵树,层次遍历 */public void traverse() {if (selfId < 0)return;print(this.selfId);if (childList == null || childList.isEmpty())return;int childNumber = childList.size();for (int i = 0; i < childNumber; i++) {TreeNode child = childList.get(i);child.traverse();}}public void print(String content) {System.out.println(content);}public void print(int content) {System.out.println(String.valueOf(content));}public void setChildList(List<TreeNode> childList) {this.childList = childList;}public int getParentId() {return parentId;}public void setParentId(int parentId) {this.parentId = parentId;}public int getSelfId() {return selfId;}public void setSelfId(int selfId) {this.selfId = selfId;}public TreeNode getParentNode() {return parentNode;}public void setParentNode(TreeNode parentNode) {this.parentNode = parentNode;}public String getNodeName() {return nodeName;}public void setNodeName(String nodeName) {this.nodeName = nodeName;}public Object getObj() {return obj;}public void setObj(Object obj) {this.obj = obj;}}二:TreeHelper.javaJava代码package com.tree;import java.util.List;import java.util.Iterator;import java.util.ArrayList;import java.util.HashMap;public class TreeHelper {private TreeNode root;private List<TreeNode> tempNodeList;private boolean isValidTree = true;public TreeHelper() {}public TreeHelper(List<TreeNode> treeNodeList) {tempNodeList = treeNodeList;generateTree();}public static TreeNode getTreeNodeById(TreeNode tree, int id) {if (tree == null)return null;TreeNode treeNode = tree.findTreeNodeById(id);return treeNode;}/** generate a tree from the given treeNode or entity list */public void generateTree() {HashMap nodeMap = putNodesIntoMap();putChildIntoParent(nodeMap);}/*** put all the treeNodes into a hash table by its id as the key** @return hashmap that contains the treenodes*/protected HashMap putNodesIntoMap() {int maxId = Integer.MAX_VALUE;HashMap nodeMap = new HashMap<String, TreeNode>();Iterator it = tempNodeList.iterator();while (it.hasNext()) {TreeNode treeNode = (TreeNode) it.next();int id = treeNode.getSelfId();if (id < maxId) {maxId = id;this.root = treeNode;}String keyId = String.valueOf(id);nodeMap.put(keyId, treeNode);// System.out.println("keyId: " +keyId);}return nodeMap;}/*** set the parent nodes point to the child nodes** @param nodeMap* a hashmap that contains all the treenodes by its id as the key*/protected void putChildIntoParent(HashMap nodeMap) {Iterator it = nodeMap.values().iterator();while (it.hasNext()) {TreeNode treeNode = (TreeNode) it.next();int parentId = treeNode.getParentId();String parentKeyId = String.valueOf(parentId);if (nodeMap.containsKey(parentKeyId)) {TreeNode parentNode = (TreeNode) nodeMap.get(parentKeyId);if (parentNode == null) {this.isValidTree = false;return;} else {parentNode.addChildNode(treeNode);// System.out.println("childId: " +treeNode.getSelfId()+" parentId: "+parentNode.getSelfId());}}}}/** initialize the tempNodeList property */protected void initTempNodeList() {if (this.tempNodeList == null) {this.tempNodeList = new ArrayList<TreeNode>();}}/** add a tree node to the tempNodeList */public void addTreeNode(TreeNode treeNode) {initTempNodeList();this.tempNodeList.add(treeNode);}/*** insert a tree node to the tree generated already** @return show the insert operation is ok or not*/public boolean insertTreeNode(TreeNode treeNode) {boolean insertFlag = root.insertJuniorNode(treeNode);return insertFlag;}/*** adapt the entities to the corresponding treeNode** @param entityList* list that contains the entities*@return the list containg the corresponding treeNodes of the entities*/public static List<TreeNode> changeEnititiesToTreeNodes(List entityList) {OrganizationEntity orgEntity = new OrganizationEntity();List<TreeNode> tempNodeList = new ArrayList<TreeNode>();TreeNode treeNode;Iterator it = entityList.iterator();while (it.hasNext()) {orgEntity = (OrganizationEntity) it.next();treeNode = new TreeNode();treeNode.setObj(orgEntity);treeNode.setParentId(orgEntity.getParentId());treeNode.setSelfId(orgEntity.getOrgId());treeNode.setNodeName(orgEntity.getOrgName());tempNodeList.add(treeNode);}return tempNodeList;}public boolean isValidTree() {return this.isValidTree;}public TreeNode getRoot() {return root;}public void setRoot(TreeNode root) {this.root = root;}public List<TreeNode> getTempNodeList() {return tempNodeList;}public void setTempNodeList(List<TreeNode> tempNodeList) {this.tempNodeList = tempNodeList;}}三 实体OrganizationEntityJava代码package com.tree;public class OrganizationEntity {public int parentId;public int orgId;public String orgName;public int getParentId() {return parentId;}public void setParentId(int parentId) {this.parentId = parentId;}public int getOrgId() {return orgId;}public void setOrgId(int orgId) {this.orgId = orgId;}public String getOrgName() {return orgName;}public void setOrgName(String orgName) {this.orgName = orgName;}}