First, let’s take a look at the code examples of two tree menu structures.
SingleTreeNode:
package com.zzj.tree;public class SingleTreeNode {private int id;private int pId;private String name;public SingleTreeNode() {}public SingleTreeNode(int id, int pId, String name) {this.id = id;this.pId = pId;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public int getpId() {return pId;}public void setpId(int pId) {this.pId = pId;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Override public String toString() {return "SingleTreeNode [id=" + id + ", pId=" + pId + ", name=" + name + "]";}}This structure is very suitable for storage in relational databases.
MultiTreeNode:
package com.zzj.tree;import java.util.List;public class MultiTreeNode {private int id;private String name;private List<MultiTreeNode> children;public MultiTreeNode() {}public MultiTreeNode(int id, String name) {this.id = id;this.name = name;}public MultiTreeNode(int id, String name, List<MultiTreeNode> children) {this.id = id;this.name = name;this.children = children;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<MultiTreeNode> getChildren() {return children;}public void setChildren(List<MultiTreeNode> children) {this.children = children;}@Override public String toString() {return "MultiTreeNode [id=" + id + ", name=" + name + ", children=" + children + "]";}}Two converters
ToMultiTreeTransformer:
package com.zzj.tree;import java.util.ArrayList;import java.util.List;public class ToMultiTreeTransformer {private List<SingleTreeNode> singleTreeNodes;private List<MultiTreeNodes> multiTreeNodes = new ArrayList<>();public ToMultiTreeTransformer(List<SingleTreeNodes> singleTreeNodes) {this.singleTreeNodes = singleTreeNodes;}public List<MultiTreeNode> transform(){// First find all root nodes for (int i = 0; i < singleTreeNodes.size(); i++) {SingleTreeNode singleTreeNodes.get(i);Boolean isRoot = true;for (int j = 0; j < singleTreeNodes.size(); j++) {SingleTreeNode temp = singleTreeNodes.get(j);if (singleTreeNode.getpId() == temp.getId()) {isRoot = false;break;}}if (isRoot) {MultiTreeNode multiTreeNode = new MultiTreeNode(singleTreeNode.getId(), singleTreeNode.getName());multiTreeNodes.add(multiTreeNode);}}// Set child node for (int i = 0; i < multiTreeNodes.size(); i++) {MultiTreeNode multiTreeNode = multiTreeNodes.get(i);setChildren(multiTreeNode);}return multiTreeNodes;}/** * Set child node* @param multiTreeNode */private void setChildren(MultiTreeNode multiTreeNode){for (int j = 0; j < singleTreeNodes.size(); j++) {SingleTreeNode temp = singleTreeNodes.get(j); if (temp.getpId() == multiTreeNode.getId()) {MultiTreeNode child = new MultiTreeNode(temp.getId(), temp.getName());List<MultiTreeNode> children = multiTreeNode.getChildren();if (children == null) {children = new ArrayList<>();multiTreeNode.setChildren(child);}children.add(child);setChildren(child);}}}}}ToSingleTreeTransformer:
package com.zzj.tree;import java.util.ArrayList;import java.util.List;public class ToSingleTreeTransformer {private List<MultiTreeNode> multiTreeNodes;private List<SingleTreeNodes> singleTreeNodes = new ArrayList<>();public ToSingleTreeTransformer(List<MultiTreeNodes> multiTreeNodes) {this.multiTreeNodes = multiTreeNodes;}public List<SingleTreeNode> transform(){// Get the root node for (int i = 0; i < multiTreeNodes.size(); i++) {MultiTreeNode multiTreeNode = multiTreeNodes.get(i); SingleTreeNode singleTreeNode = new SingleTreeNode(multiTreeNode.getId(), 0, multiTreeNode.getName()); singleTreeNodes.add(singleTreeNode);}// Get the child node for (int i = 0; i < multiTreeNodes.size(); i++) {MultiTreeNode multiTreeNode = multiTreeNodes.get(i);getChildren(multiTreeNode);}return singleTreeNodes;}/** * Get child node* @param multiTreeNode */private void getChildren(MultiTreeNode multiTreeNode){for (int i = 0; i < singleTreeNodes.size(); i++) {SingleTreeNode temp = singleTreeNodes.get(i); if (multiTreeNode.getId() == temp.getId()) {List<MultiTreeNode> child = multiTreeNode.getChildren();if (children != null) {for (int j = 0; j < children.size(); j++) {MultiTreeNode child = children.get(j);SingleTreeNode singleTreeNode = new SingleTreeNode(child.getId(), multiTreeNode.getId(), child.getName());singleTreeNodes.add(singleTreeNode);getChildren(child);}}}}}}}test
package com.zzj.tree;import java.util.ArrayList;import java.util.List;public class TreeTransformerTest {private final static List<SingleTreeNode> SINGLE_TREE = new ArrayList<SingleTreeNode>();static {SingleTreeNode China = new SingleTreeNode(1, 0, "China");SINGLE_TREE.add(China);SingleTreeNode Hunan = new SingleTreeNode(2, 1, "Hunan");SINGLE_TREE.add(Hunan);SingleTreeNode Changsha = new SingleTreeNode(3, 2, "Changsha");SINGLE_TREE.add(Changsha);SingleTreeNode Hubei = new SingleTreeNode(4, 1, "Hubei");SINGLE_TREE.add(Hubei);SingleTreeNode Wuhan = new SingleTreeNode(5, 4, "Wuhan");SINGLE_TREE.add(Wuhan);SingleTreeNode America = new SingleTreeNode(6, 0, "United States");SINGLE_TREE.add(America);SingleTreeNode California = new SingleTreeNode(7, 6, "California");SINGLE_TREE.add(California);SingleTreeNode LosAngeles = new SingleTreeNode(8, 7, "Los Angeles");SINGLE_TREE.add(LosAngeles);}public static void main(String[] args) throws Exception {ToMultiTreeTransformer multiTreeTransformer = new ToMultiTreeTransformer(SINGLE_TREE);List<MultiTreeNode> multiTreeNodes = multiTreeTransformer.transform();System.out.println(multiTreeNodes);ToSingleTreeTransformer singleTreeTransformer = new ToSingleTreeTransformer(multiTreeNodes);List<SingleTreeNodes> singleTreeNodes = singleTreeTransformer.transform();System.out.println(singleTreeNodes);}}Output result:
[MultiTreeNode [id=1, name=China, children=[MultiTreeNode [id=2, name=Hunan, children=[MultiTreeNode [id=3, name=Changsha, children=null]]]], MultiTreeNode [id=4, name=Hubei, children=[MultiTreeNode [id=5, name=Wuhan, children=null]]]]], MultiTreeNode [id=6, name=USA, children=[MultiTreeNode [id=7, name=California, children=[MultiTreeNode [id=8, name=Los Angeles, children=null]]]]]] [SingleTreeNode [id=1, pId=0, name=China], SingleTreeNode [id=6, pId=0, name=US], SingleTreeNode [id=2, pId=1, name=Hunan], SingleTreeNode [id=3, pId=2, name=Changsha], SingleTreeNode [id=4, pId=1, name=Hubei], SingleTreeNode [id=5, pId=4, name=Wuhan], SingleTreeNode [id=7, pId=6, name=California], SingleTreeNode [id=8, pId=7, name=Los Angeles]]
Summarize
The above is the entire content of this article about the conversion code of two tree menu structures of Java programming. I hope it will be helpful to everyone. Interested friends can continue to refer to this site:
Java implementation to generate the complete code example of Excel tree header
Java language describes the depth and width of a binary tree
The complete code example of the Java algorithm to implement red and black tree
If there are any shortcomings, please leave a message to point it out!