[算法]将字符串转换为树形结构,标题要长

sobadname 2014-08-26 10:27:00
一个LIST里包含字符串如下:
1,3,5,7,9
2,4,6
2,4,10,11,18
解释,例如1,3,5,7,9,代表9的父节点是7,7的父节点是5,以此类推。
问题:如何重建这棵树?
结果大致如下:
List<TestVo> result;
result.get(0).id=1;result.get(1).id=2;
result.get(0).children.get(0).id=3;
......

TestVo:{
int id;
List children;
}
...全文
347 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 sobadname 的回复:
[quote=引用 6 楼 shijing266 的回复:] 抱歉,刚刚没看到你的需求,既然你的设计是这样的,为何不用map结构一个对象一个节点,而且刚好递归输出tree
我想过这样,用mybatis的递归查询可以直接输出结果,但这样会查询很多次,而且SQL也要用到exists的子查询。 一是怕有影响;二也想把结构简单化,刚好有这个东西,就把他当做一个有趣的东西来做做[/quote] 有想法不错.. 现在我忙了,等有空来看. 楼主就自己先看看吧
sobadname 2014-08-26
  • 打赏
  • 举报
回复
引用 6 楼 shijing266 的回复:
抱歉,刚刚没看到你的需求,既然你的设计是这样的,为何不用map结构一个对象一个节点,而且刚好递归输出tree
我想过这样,用mybatis的递归查询可以直接输出结果,但这样会查询很多次,而且SQL也要用到exists的子查询。 一是怕有影响;二也想把结构简单化,刚好有这个东西,就把他当做一个有趣的东西来做做
  • 打赏
  • 举报
回复
引用 3 楼 sobadname 的回复:
直接上业务需求吧。 有一个树形结构表,字段如下:

CREATE TABLE `ba_test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL COMMENT '名称',
  `parent_id` bigint(20) NOT NULL COMMENT '父节点',
  `show_order` int(11) NOT NULL DEFAULT '1' COMMENT '显示顺序',
  `id_path` varchar(255) NOT NULL COMMENT 'ID路径',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
由于是MYSQL,所以增加了id_path保存ID路径,方便用find_in_set查询子节点。 现在有一个用户他关联上这棵树的某个节点(可能是最顶层,也有可能是中间层,也可能是叶子节点),所有这些都保存的是叶子节点。 具体如一楼的测试数据,保存的是如下的关系: user_id test_id 1 9 1 6 1 18
抱歉,刚刚没看到你的需求,既然你的设计是这样的,为何不用map结构一个对象一个节点,而且刚好递归输出tree
sobadname 2014-08-26
  • 打赏
  • 举报
回复
引用 4 楼 shijing266 的回复:
看看这个http://fireinjava.iteye.com/blog/1782161
谢谢,你那个地址描述的情况跟这个不一样 其实可以把这个当一个题来做,可以简化模型
  • 打赏
  • 举报
回复
sobadname 2014-08-26
  • 打赏
  • 举报
回复
直接上业务需求吧。 有一个树形结构表,字段如下:

CREATE TABLE `ba_test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL COMMENT '名称',
  `parent_id` bigint(20) NOT NULL COMMENT '父节点',
  `show_order` int(11) NOT NULL DEFAULT '1' COMMENT '显示顺序',
  `id_path` varchar(255) NOT NULL COMMENT 'ID路径',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
由于是MYSQL,所以增加了id_path保存ID路径,方便用find_in_set查询子节点。 现在有一个用户他关联上这棵树的某个节点(可能是最顶层,也有可能是中间层,也可能是叶子节点),所有这些都保存的是叶子节点。 具体如一楼的测试数据,保存的是如下的关系: user_id test_id 1 9 1 6 1 18
sobadname 2014-08-26
  • 打赏
  • 举报
回复
引用 1 楼 shijing266 的回复:
list是无序的,你确定能直接这样转么?
原始数据LIST保存的是字符串“1,3,5,7,9”,LIST是ARRAYLIST就有序了
  • 打赏
  • 举报
回复
list是无序的,你确定能直接这样转么?

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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