SoFunction
Updated on 2025-04-11

How to use recursively to span tree structures in java

Recursively spanning tree structures in Java

1. Prepare entity objects

public class TreeNode{
	private int id;
	private int pid;
	private String name;
	private String content;
	private List<TreeNode> children;

	public TreeNode() {
	}

	public TreeNode(int id, int pid, String name, String content) {
		 = id;
		 = pid;
		 = name;
		 = content;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		 = id;
	}

	public int getPid() {
		return pid;
	}

	public void setPid(int pid) {
		 = pid;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		 = name;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		 = content;
	}

	public List<TreeNode> getChildren(){
		return children;
	}

	public void setChildren(List<TreeNode> children){
		 = children;
	}

	@Override
	public String toString() {
		return "TreeNode{" +
				", p, name='" + name + '\'' +
				", content='" + content + '\'' +
				'}';
	}
}

2. Prepare test data

//Methods for generating test datapublic static List&lt;TreeNode&gt; generateList(){
	List&lt;TreeNode&gt; list = new ArrayList&lt;&gt;();
	TreeNode treeModel1 = new TreeNode(1,0,"System Management",getRandomStr());
	TreeNode treeModel2 = new TreeNode(11,1,"User Management",getRandomStr());
	TreeNode treeModel3 = new TreeNode(111,11,"User Add",getRandomStr());
	TreeNode treeModel4 = new TreeNode(2,0,"Permission Management",getRandomStr());
	TreeNode treeModel5 = new TreeNode(21,2,"Account Management",getRandomStr());
	TreeNode treeModel6 = new TreeNode(221,2,"Role Management",getRandomStr());
	(treeModel1);
	(treeModel2);
	(treeModel3);
	(treeModel4);
	(treeModel5);
	(treeModel6);
	return list;
}

//I wrote a randomly generated string method with 26 lowercase letterspublic static String getRandomStr(){
	StringBuilder ret= new StringBuilder();
	for (int i = 0; i &lt; 6; i++) {
		int num=(int)(()*26+97);
		((char) num);
	}
	return ();
}

3. Construct a tree structure recursive function

/**
  * Spanning tree
  * @param list Pending data collection
  * @param pid The top-most parent id
  */
public static List&lt;TreeNode&gt; createTree(List&lt;TreeNode&gt; list,int pid){
	//Filter out all parent nodes according to parent id	List&lt;TreeNode&gt; tree = ().filter(e-&gt; pid == ()).collect(());
	//Transfuse all parent nodes and add all child nodes belonging to the node's children property under the node's children property	for (TreeNode node: tree) {
		int id = ();
		//Filter out all child nodes belonging to this node		List&lt;TreeNode&gt; cList = ().filter(e-&gt; id == ()).collect(());
		//Judge whether there is a child node. If the child node has data, use the id of the child node as a pid to continue recursively processing to the lower level.		if(!(cList)){
			createTree(list,id);
			(cList);
		}
	}
	return tree;
}

4. Test

public static void main(String[] args) throws Exception {

	List<TreeNode> list = generateList();
	(::println);
	List<TreeNode> tree = createTree(list,0);
	((tree));


}

5. Output result

TreeNode{id=1, pid=0, name='System Management', content='vyzjpq'}
TreeNode{id=11, pid=1, name='user management', content='qwbiex'}
TreeNode{id=111, pid=11, name='User added', content='zuyuth'}
TreeNode{id=2, pid=0, name='Permission Management', content='ctgevw'}
TreeNode{id=21, pid=2, name='Account Management', content='ulgvdx'}
TreeNode{id=221, pid=2, name='role management', content='fzxufe'}
[{"children":[{"children":[{"content":"zuyuth","id":111,"name":"user addition","pid":11}],"content":"qwbiex","id":11,"name":"user management","pid":1}],"content":"vyzjpq","id":1,"name":"system management"," pid":0},{"children":[{"content":"ulgvdx","id":21,"name":"account management","pid":2},{"content":"fzxufe","id":221,"name":"role management","pid":2}],"content":"ctgevw","id":2,"name":"Permission management","pid":0}]

Summarize

The above is personal experience. I hope you can give you a reference and I hope you can support me more.