java新手请教 递归输出树形结构

qq_18348109 2016-07-24 08:34:41
JAVA 新手
问一个问题,请大家帮忙
我在一个方法查出arryList 是一个二维的list, 数据是这样
[[id=1,name=name1,pid=0],[id=2,name=name3,pid=1], [id=3,name=name4,pid=2],[id=4,name=name2,pid=2],
[id=7,name=name1,pid=0],[id=8,name=name1,pid=7]]
最后想输出树形结构:
[
[
id=1,
name=name1,
pid=0,
node=[
[
id=2,
name=name3,
pid=1,
node=[
[
id=3,
name=name4,
pid=2
],
[
id=4,
name=name2,
pid=2
]
]
]
],
[
id=7,
name=name1,
pid=0,
node=[
[
id=8,
name=name1,
pid=7
]
]
]
]
]
...全文
920 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_18348109 2016-07-25
  • 打赏
  • 举报
回复
引用 1 楼 adgjmptw1jw的回复:

我在图片上大概画了一下,我不建议你直接使用别人的代码,给你讲解下,自己写,看得出来你在学树,将这个arraylist 数组放入一颗树中,然后他们在树中的位置大概如图。然后按照规则读取这棵树,先读取左孩子,然后是右孩子。情况是,读取下一层时右移,返回上一层时 左移,然后就可以打印出树的模样
能否,写个简单的代码让我参考,实在不知道如何下手
qq_18348109 2016-07-25
  • 打赏
  • 举报
回复
引用 2 楼 rickylin86的回复:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test{
	public static void main(String[] args){
		String content = "[[id=1,name=name1,pid=0],[id=2,name=name3,pid=1],[id=3,name=name4,pid=2],[id=4,name=name2,pid=2],[id=7,name=name1,pid=0],[id=8,name=name1,pid=7]]";
		process(content);
	}

	private static void process(String content){
		String space4 = "    ";
		String space8 = "        ";
		String regex = "\\[(?<attr1>\\w+=\\w+,)(?<attr2>\\w+=\\w+,)(?<attr3>\\w+=\\w+)\\]";
		Matcher matcher = Pattern.compile(regex).matcher(content);
		System.out.printf("[\n");
		while(matcher.find()){
			System.out.printf("%s\n%s\n%s\n%s\n%s\n",space4 + "node=[",space8 + matcher.group("attr1"),space8 + matcher.group("attr2"),space8 + matcher.group("attr3"),space4 + "]");
		}
		System.out.printf("]\n");
	}
}
这些数据,只是举个例子,可能数据量很大
qq_18348109 2016-07-25
  • 打赏
  • 举报
回复
是个arraylist,不是一个string类型的
rickylin86 2016-07-25
  • 打赏
  • 举报
回复

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test{
	public static void main(String[] args){
		String content = "[[id=1,name=name1,pid=0],[id=2,name=name3,pid=1],[id=3,name=name4,pid=2],[id=4,name=name2,pid=2],[id=7,name=name1,pid=0],[id=8,name=name1,pid=7]]";
		process(content);
	}

	private static void process(String content){
		String space4 = "    ";
		String space8 = "        ";
		String regex = "\\[(?<attr1>\\w+=\\w+,)(?<attr2>\\w+=\\w+,)(?<attr3>\\w+=\\w+)\\]";
		Matcher matcher = Pattern.compile(regex).matcher(content);
		System.out.printf("[\n");
		while(matcher.find()){
			System.out.printf("%s\n%s\n%s\n%s\n%s\n",space4 + "node=[",space8 + matcher.group("attr1"),space8 + matcher.group("attr2"),space8 + matcher.group("attr3"),space4 + "]");
		}
		System.out.printf("]\n");
	}
}
叶旅魂途 2016-07-24
  • 打赏
  • 举报
回复

我在图片上大概画了一下,我不建议你直接使用别人的代码,给你讲解下,自己写,看得出来你在学树,将这个arraylist 数组放入一颗树中,然后他们在树中的位置大概如图。然后按照规则读取这棵树,先读取左孩子,然后是右孩子。情况是,读取下一层时右移,返回上一层时 左移,然后就可以打印出树的模样

50,504

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧