`
QuarterLifeForJava
  • 浏览: 176296 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

递归遍历树形结构及数据库设计

阅读更多
public class Test {
	
	public static void main(String[] args) {
		Map<Integer,Integer> map = new HashMap<Integer,Integer>();
		map.put(1, 0);
		map.put(2, 0);
		map.put(3, 1);
		map.put(4, 1);
		map.put(5, 2);
		map.put(6, 4);
		map.put(7, 4);
		map.put(8, 7);
		//得到某一节点下的所有子节点(如果有)
		getIds(1, map);
		System.out.println(listRet);
	}
	
	private static List<Integer> listRet = new ArrayList<Integer>();
	public static void getIds(int id,Map<Integer,Integer> map){
		List<Integer> list = new ArrayList<Integer>();
		for (int i = 0; i < map.size(); i++) {
			int x = map.get((i+1));
			if(x==id){
				list.add((i+1));
			}
		}
		if(list.size()!=0){
			listRet.addAll(list);
			System.out.println(id+"->"+list);
			for (int i = 0; i < list.size(); i++) {
				getIds(list.get(i), map);
			}
		}
	}

}


数据库设计:




查询语句为:
SELECT * from tree WHERE
position REGEXP CONCAT((SELECT position from tree where name = 'fruit'),'[\w\W]*')

当然,你用like也可以
查询结果为:

如果要插入的话略有一点复杂,步骤为:
如当我要在id=36的banana边插入一个同级的,做法为:
1、先获得blue的position,为1-1-2
2、找到1-1-2[\w\W]*匹配的正则,获取最后一段,按降序排列,得到第一个的数字
3、将数字+1,并拼装1-1-2为最终结果
  • 大小: 6.8 KB
  • 大小: 10.4 KB
  • 大小: 7.6 KB
  • 大小: 4.8 KB
分享到:
评论

相关推荐

    C#父子关系树递归遍历方法(含源码).rar

    C#文档:二叉树、父子关系树(BOM常见存储形式)递归遍历取数并用树形结构显示方法;包含dbHelpSql类。复制代码运行DBConfig窗体链接数据库,表结构见“表结构.SQL”文档。

    js 递归json树实现根据子id查父id的方法分析

    本文实例讲述了js 递归json树实现根据子id查父id的方法。分享给大家供大家参考,具体如下: 最近做了一个类似用js实现思维导图的功能,作为思维导图,一定会有树状结构的数据产生,在操作里面的节点时会经常需要查找...

    thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法

    主要介绍了thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法,涉及thinkPHP数据库查询,数组遍历与字符串操作等技巧,需要的朋友可以参考下

    element-ui树形控件后台返回的数据+生成组织树的工具类

    开发项目的时候遇到需要在表单中选择参会人员,根据不同部门下选择不同的人,在element-ui中有树形控件能满足这种情况,后台封装数据记录一下。  封装格式:  返回数据格式:  接收数据的pojo类: 2018年4月12...

    mysql 无限级分类实现思路

    这种算法的数据库结构设计最为简单。category表中一个字段id,一个字段fid(父id)。这样可以根据WHERE id = fid来判断上一级内容,运用递归至最顶层。 分析:通过这种数据库设计出的无限级,可以说读取的时候相当费劲...

    数据结构与算法(二叉树)

    在计算机领域也常用到树形结构。例如编译程序中用树表示源程序语法结构,数据库系统中用树组织信息等等。 我们举一个大家都有理解的例子:一个学校下有不同的学院,每个学院下又有不同的专业,每个专业下又有不同的...

    SQL处理多级分类,查询结果呈树形结构

    这样处理的弊端是:如果数据量大,子分类很多,达到4级以上,这方法处理极端占用数据库连接池 对性能影响很大。 如果用SQL下面的CTE递归处理的话,一次性就能把结果给查询出来,而且性能很不错 比用程序处理(数据量...

    DBTree示例,先序表示,一句sql显示整棵树

    通常情况下,树在数据库中实现的时候采用的是树的双亲表示法,设一个编号字段id,和一个父亲编号字段parent_id,来实现树形结构。这种数据结构的特点是:操作简单,几乎不用维护,然而优点带来的问题是对树进行遍历的...

    解析PHP无限级分类方法及代码

    存储树形结构是一个很常见的问题,他有好几种解决方案。主要有两种方法:邻接列表模型和改进前序遍历树算法 在本文中,我们将探讨这两种保存层次数据的方法。我将举一个在线食品店树形图的例子。这个食品店通过类别...

    计算机二级C语言考试题预测

    (29) 用树形结构来表示实体之间联系的模型称为(B) A. 关系模型 B. 层次模型 C. 网状模型 D. 数据模型 (30) 关系数据库管理系统能实现的专门关系运算包括(B) A. 排序、索引、统计 B. 选择、投影、连接 C. 关联、更新...

    二级C语言公共基础知识

    (29) 用树形结构来表示实体之间联系的模型称为______。(B) A. 关系模型 B. 层次模型 C. 网状模型 D. 数据模型 (30) 关系数据库管理系统能实现的专门关系运算包括______。(B) A. 排序、索引、统计 B. 选择、投影、...

    数据结构及算法C语言实现代码集[推荐下载]

    简单数据库.c 编程汉字问题.txt 编随机数.c 试题.C 递堆法.C ./单元加&#58; erre2.c erre.c 数组完全单元.c 栈单元加.c ./字符&#58; 单词倒转.c 反出字符.c 回文.c 字符串查找.c 字符编辑.c 字符编辑技术&#40;插入...

    史上最全经典数据结构算法c语言实现代码合集

    简单数据库.txt 简单计算器.txt 简单逆阵.txt 线性顺序存储结构.txt 线索化二叉树.txt 绘制圆.txt 编随机数.txt 网络最短路径Dijkstra算法.txt 自我复制.txt 节点.txt 苹果分法.txt 螺旋数组1.txt 螺旋...

    经典数据结构算法c语言实现代码(大全)

    简单数据库.txt 简单计算器.txt 简单逆阵.txt 线性顺序存储结构.txt 线索化二叉树.txt 绘制圆.txt 编随机数.txt 网络最短路径Dijkstra算法.txt 自我复制.txt 节点.txt 苹果分法.txt 螺旋数组1.txt 螺旋...

    计算机二级公共基础知识

    算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。 (5)指令系统 所谓指令系统指的是一个计算机系统能执行的所有指令的集合。 (2)数据结构研究的3个方面 ① 数据集合中各数据元素之间所固有...

    程序员面试攻略 part1(共2个)

    4.4 面试例题:左遍历,不使用递归60 4.5 面试例题:最低公共祖先63 第5章数组与字符串65 5.1 数组65 5.1.1 C / C++ 66 5.1.2 Java 67 5.1.3 Perl67 5.2 字符串68 5.2.1 C 68 5.2.2 C++ 68 5.2.3 Java 69...

    程序员面试攻略part 2(共2个)

    4.4 面试例题:左遍历,不使用递归60 4.5 面试例题:最低公共祖先63 第5章数组与字符串65 5.1 数组65 5.1.1 C / C++ 66 5.1.2 Java 67 5.1.3 Perl67 5.2 字符串68 5.2.1 C 68 5.2.2 C++ 68 5.2.3 Java 69...

    java源码包---java 源码 大量 实例

    递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例194 以树形显示的程序界面 259 实例195 动态按钮的窗体界面 260 第9章 窗体控制技术 262 9.1 窗体常用操作 263 实例196 以全屏方式显示程序窗体 263 实例197 通过子窗体刷新父窗体 264 实例198 拖动无边框窗体 ...

Global site tag (gtag.js) - Google Analytics