`
阅读更多

根据当前节点获取所有上层结构的组织(递归算法)

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

蕃薯耀 2016年3月11日 15:18:10 星期五

http://fanshuyao.iteye.com/

 

一、使用的范围是最顶层的父项id(parentOrgId)必须为空,作为递归算法的出口。

 

实现的效果如下:

中国燃气 → 中国燃气控股有限公司 → 研发测试中心--03 → 中试项目公司--02 → 第二项目公司 → 第二部门002

 

/**
	 * 递归获取传入组织org的父项组织层级关系
	 * @param org
	 * @param orgs 返回的父项组织层级关系集合(包含org本身)
	 */
	public void getOrgParents(Org org, List<Org> orgs){
		if(org != null){
			if(org.getParentOrgId() != null){
				Org parentOrg = orgService.getById(org.getParentOrgId());
				getOrgParents(parentOrg, orgs);
			}
			orgs.add(org);
		}
	}
	
	/**
	 * 根据父项组织层级关系集合(parentOrgs)获取显示的字符串
	 * @param parentOrgs 父项组织层级关系集合
	 * @param linkSymbol 字符串连接符号,linkSymbol==null时默认为→,可以设置为“—”、“——”等特殊符号
	 */
	public String getOrgParentsString(List<Org> parentOrgs, String linkSymbol){
		StringBuffer parentString = new StringBuffer("");
		if(linkSymbol == null){
			linkSymbol = "→";
		}
		for (Org parent : parentOrgs) {
			parentString.append(parent.getOrgName()).append(" ").append(linkSymbol).append(" ");
		}
		if(parentString.indexOf(linkSymbol) > -1){
			parentString.delete(parentString.lastIndexOf(linkSymbol)-1, parentString.length());
		}
		return parentString.toString();
	}

 

二、实现调用

1、原理:根据传入的用户id获取所有的部门后,再分别根据每个部门去获取层级关系,直到最顶层,然后拼接成字符串返回给对象

@RequestMapping("/xxx")
	@ResponseBody
	public String xxx(HttpServletRequest rq, HttpServletResponse rs) throws Exception {
		String userId = rq.getParameter("userId");
		if(!StrUtils.isEmpty(userId)){
			List<Org> orgs =  orgService.getOrgsByUserId(userId);
			for (Org org : orgs) {
				List<Org> parentOrgs = new ArrayList<Org>();
				getOrgParents(org, parentOrgs);
				org.setParentOrgName(getOrgParentsString(parentOrgs, null));
			}
			return JsonUtils.Object2String(orgs);
		}
		return "";
	}

 

 

 

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

蕃薯耀 2016年3月11日 15:18:10 星期五

http://fanshuyao.iteye.com/

分享到:
评论

相关推荐

    数据库“路径法”无限级分类节点算法设计与实现.pdf

    通常,每个分类节点都会被赋予一个唯一的路径标识符,它由上层所有父节点的ID按照一定的顺序组合而成。利用路径标识符,可以轻松地通过简单的字符串匹配或比较来判断出分类之间的层级关系。这不仅简化了数据库结构,...

    数据结构二叉树查找方式

    * 中序遍历:先递归访问左子节点,然后访问当前节点,最后递归访问右子节点。 * 后序遍历:先递归访问左子节点和右子节点,然后访问当前节点。 五、二叉树的基本运算 二叉树的基本运算包括: * 创建二叉树:创建...

    ZUXIAN.rar_probablyb3u_refer977_site:www.pudn.com

    如果值为x的节点存在且不超过1个,那么这个算法应当能够找出这个节点的所有上层节点。 实现这个算法,我们可以采用深度优先搜索(DFS)或广度优先搜索(BFS)的方法。以下是两种方法的基本思路: 1. **深度优先搜索...

    05 ParentTree.rar

    6. **递归和迭代**:在处理树结构时,递归算法是常见的解决策略,例如在遍历和查找过程中。同时,也可以使用栈或队列等数据结构进行迭代实现。 7. **树的存储方式**:链式存储(每个节点包含指向子节点的指针)和...

    Java递归运行的机制:递归的微观解读图文分析

    上层递归调用根据返回值(可能是更新后的链表或null)继续构建新的链表。 尽管递归简化了代码的编写,但它的运行是有代价的。每次函数调用都需要占用系统栈空间,如果递归深度过大,可能导致栈溢出。此外,递归调用...

    基于BP算法的函数逼近算法设计

    BP神经网络一般由输入层、输出层和若干隐含层构成,每层由多个节点(即神经元)组成,上层节点与下层节点之间通过权重连接,而同一层内的节点之间不直接相连。这样的结构确保了信息的单向传递特性。 #### 2. BP反向...

    2-3树插入结点、删除结点、遍历代码

    在IT领域,数据结构是计算机科学的基础,它们是组织和管理数据的方式,使得算法能够高效地操作这些数据。2-3树是一种自平衡的多路查找树,它介于二叉搜索树和B树之间,提供了对数据的快速查找、插入和删除操作。这种...

    数据结构 用C++环境编写程序 构建哈弗曼树

    在IT领域,数据结构是计算机科学的基础,它研究如何有效地组织和存储数据,以便于算法的执行。哈弗曼树(Huffman Tree),也被称为最优二叉树,是一种特殊的二叉树,常用于数据压缩,因为其能生成最短的前缀编码。在...

    FPTree 算法C实现 寻找关联规则 数据挖掘

    接着,根据这些频率构建一棵倒置的树结构——FPTree,其中树的根节点是空节点,内部节点代表项,叶节点则表示项的计数。 在FPTree的构造过程中,数据被按照项的频率降序排序,然后逐条插入到树中。每条事务都会自底...

    数据结构演示软件

    本课件是一个动态演示数据结构算法执行过程的辅助教学软件, 它可适应读者对算法的输入数据和过程执行的控制方式的不同需求, 在计算机的屏幕上显示算法执行过程中数据的逻辑结构或存储结构的变化状况或递归算法执行...

    HanNuoTa.zip_made

    这个问题通常用来介绍递归算法,但在这里,我们将探讨一种非递归的解决方案,即通过二叉树查找的方法来解决。 首先,我们来理解二叉树的基本概念。二叉树是一种特殊的树结构,其中每个节点最多有两个子节点,分别...

    jQuery获取父元素节点、子元素节点及兄弟元素节点的方法

    `将会获取最近的上层兄弟节点中的class为`par`的元素。 - `find()`方法:虽然通常用于查找子元素,但也可以用来获取父元素,尤其是当元素嵌套较深时。例如,`$("#dwtedx").find("ul");`可以找到`dwtedx`元素下所有的...

    用c描述的数据结构演示软件

    本课件是一个动态演示数据结构算法执行过程的辅助教学软件, 它可适应读者对算法的输入数据和过程执行的控制方式的不同需求, 在计算机的屏幕上显示算法执行过程中数据的逻辑结构或存储结构的变化状况或递归算法执行...

    数据结构教程电子课件

    学习数据结构,就是学习如何根据问题的需求选择合适的数据结构来优化算法。 在数据结构教程中,PPT可能会涵盖以下关键知识点: 1. **数组**:作为最基础的数据结构,数组是一组相同类型的数据元素的有序集合。讲解...

    数据结构实验报告 哈夫曼编码及应用

    在哈夫曼树中,权值较小的节点通常位于树的上层,权值较大的节点位于下层。这种结构使得频繁出现的字符对应的编码较短,不常出现的字符编码较长,从而达到数据压缩的目的。 2. 实验目的: (1) 理解哈夫曼树在数据...

    人工智能博弈搜索(极小极大值、α-β剪枝)

    然后,算法回溯到上层节点,根据子节点的评估结果更新当前节点的值。 然而,极小极大值算法的效率较低,因为它需要遍历所有可能的走法。为了解决这个问题,引入了α-β剪枝技术。α-β剪枝是对极小极大值算法的优化...

    树和二叉树(1)树.pdf

    节点之间存在双亲-孩子和兄弟关系,双亲节点是孩子的上层节点,同一双亲的孩子之间是兄弟关系。节点的层次是从根节点开始计算,根节点在第一层,其子节点在第二层,以此类推。树的深度是树中节点的最大层次。 接...

    算法演示程序-哈夫曼编码-汉诺塔等

    解决汉诺塔问题的关键在于使用递归策略:首先将上层的n-1个盘子借助中间柱子B移到目标柱子C,然后将剩余的大盘子直接移到C,最后再把之前放在B上的n-1个盘子借助A移到C。 多线程是现代计算机编程中的一个重要概念,...

    R树的插入与删除,详细的

    - **平衡性**:通过节点分裂和合并等操作,确保所有叶子节点的高度相同,从而实现平衡。 - **利用率**:通过设定节点的最大元素数量M和最小元素数量m,来优化空间利用率,减少空闲空间。 - **查询效率**:利用R树的...

Global site tag (gtag.js) - Google Analytics