Java 多叉树的实现,完成树的初始化和遍历。包括两个文件(TreeNode.java和TreeHelper.java)
TreeNode类完成树节点的数据结构,TreeHelper类通过输入一个TreeNode列表,生成一颗有一个树根的树!其它函数接口自己看看就明白了,希望对你有帮助。
一:树节点的定义(TreeNode.java)
二:TreeHelper.java
三 实体OrganizationEntity
TreeNode类完成树节点的数据结构,TreeHelper类通过输入一个TreeNode列表,生成一颗有一个树根的树!其它函数接口自己看看就明白了,希望对你有帮助。
一:树节点的定义(TreeNode.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.java
- 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;
- }
- }
三 实体OrganizationEntity
- 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;
- }
- }