java递归树型结构通用数据库

合集下载

使用Java将一个List运用递归转成树形结构案例

使用Java将一个List运用递归转成树形结构案例

使⽤Java将⼀个List运⽤递归转成树形结构案例在开发中,我们会遇到将不同组织架构合并成tree这种树状结构,那么如果做呢?实际上,我们也可以理解为如何将拥有⽗⼦关系的list转成树形结构,⽽这其中主要的⽅法就是递归!1、实体对象:@Datapublic class Node {private Integer id;private String city;private Integer pid;private List<Node> children;public Node(Integer id,String city,Integer pid){this.id = id;this.city = city;this.pid = pid;}}2、转换⼯具类:public class TreeUtils {//把⼀个List转成树static List<Node> buildTree(List<Node> list,Integer pid){List<Node> tree=new ArrayList<>();for(Node node:list){if(Objects.equals(node.getPid(),pid)){tree.add(findChild(node,list));}}return tree;}static Node findChild(Node node, List<Node> list){for(Node n:list){if(Objects.equals(n.getPid(),node.getId())){if(node.getChildren() == null){node.setChildren(new ArrayList<Node>());}node.getChildren().add(findChild(n,list));}}return node;}public static void main(String[] args) {Node node0=new Node(0,"中国",-1);Node node1=new Node(1,"湖北省",0);Node node2=new Node(2,"武汉市",1);Node node3=new Node(3,"洪⼭区",2);Node node4=new Node(4,"宜昌市",1);Node node5=new Node(5,"上海市",0);Node node6=new Node(6,"静安区",5);List<Node> list=new ArrayList<>();list.add(node3);list.add(node4);list.add(node1);list.add(node2);list.add(node5);list.add(node6);list.add(node0);List<Node> nodes = buildTree(list,-1);System.out.println(JSON.toJSONString(nodes));}}3、运⾏结果:这样list就成功转换成为了tree装结构到此这篇关于使⽤Java将⼀个List运⽤递归转成树形结构案例的⽂章就介绍到这了,更多相关Java将list运⽤成树形结构内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

java 查询数据库数据递归处理

java 查询数据库数据递归处理

java 查询数据库数据递归处理在Java中查询数据库数据并进行递归处理是一个常见的需求,特别是在处理树状结构数据或者具有层级关系的数据时。

通过递归处理,我们可以方便地遍历整个数据集并进行相应的操作。

以下是关于如何在Java中进行数据库数据的递归处理的参考内容:首先,我们需要建立一个数据库连接,可以使用JDBC来实现。

在Java中,我们可以通过JDBC连接到数据库并执行相应的SQL语句来查询数据。

以下是一个简单的示例代码:```javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class DatabaseUtils {private static final String URL = "jdbc:mysql://localhost:3306/database_name";private static final String USERNAME = "username";private static final String PASSWORD = "password";public static Connection getConnection() {Connection connection = null;try {connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);} catch (SQLException e) {e.printStackTrace();}return connection;}public static void closeConnection(Connection connection) {if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}```在上面的示例代码中,我们通过JDBC建立了一个数据库连接,并提供了一个用于获取数据库连接的方法。

java递归树型结构通用数据库

java递归树型结构通用数据库

表结构/*** 删除部门删除时从选中级的所有子级** @param dept* @return*/public JsonResult delDept(Dept dept) {JsonResult jr = new JsonResult();Boolean flags=true;try {String str = "";User user=new User();List<Dept> sortList = new ArrayList<Dept>();sortList.add(dept);getDeptSortList(sortList,dept.getId()); //起始根节点id,等级为0for(Dept bean: sortList){user.setDeptId(bean.getId()); //判断部门下面是否有用户List<User> users =userDao.getByDeptIdIsUerOrNO(user);int userSize=users.size();if(userSize>0){jr.setMessage("部门名称:(" + users.get(0).getDeptName() + ")已有用户不能删除");flags=false;break;}}//部门没有被用户使用时才可以册子if(flags){for(Dept bean: sortList){dept.setId(bean.getId());deptDao.delDept(dept);jr.setMessage(SuccessMessageEnum.detele.toDescription());}}jr.setSuccess(true);} catch (Exception e) {log.error("DeptServiceImpl-->delDept:" + e.getMessage());jr.setCode(ExceptionEnum.SystemError.toCode());jr.setMessage(e.getMessage());}return jr;}/*** 删除时递归部门树** @param* @return*/public void getDeptSortList(List<Dept> sortDeptList,Integer parentId)throws Exception { Dept bean = null;//根据选中的部门id得到本部门和第一级所有的子部门的idList<Dept> deptslist=deptDao.getByDeptIdAllSubDeptId(parentId); //;//每次查询出上级为的分类// int deptSize=deptslist.size();if(deptslist.size() > 0){for(int i=0;i<deptslist.size();i++){bean = (Dept)deptslist.get(i);sortDeptList.add(bean);getDeptSortList(sortDeptList,bean.getId()); //递归查询}}}<select id="getByDeptIdAllSubDeptId" resultClass="Dept">select id from report_sys_dept where parent_id=#value#</select><!-- 根据ID删除级联子树,--><delete id="delDept" parameterClass="Dept">delete from report_sys_dept where id = #id#;</delete>事例二表结构为:分类Id SortId所属分类Id ParentID分类名称SortName分类描述SortDesc测试数据:1000 0 A类A类1001 1000 A类_1 A类_11002 1000 A类_1 A类_11003 1001 A类_1_1 A类_1_12000 0 B类B类2001 2000 B类_1 B类_12002 2001 B类_1_1 B类_1_12003 1002 A类_1_1 A类_1_12004 2003 A类_1_1_1 A类_1_1_1java代码:(SortBean类略)/*** 查询分类的树型结构*/p ublic void getSortList(List<SortBean> sortList, Long parentId,int level){SortBean bean = null;List<SortBean> list = new ArrayList<SortBean>();String sql = "Select * from sort_ s where s.parentId = ?";try{System.out.println("sql:"+sql);list = (List<SortBean>)jdbcDao.queryBeanList(sql, SortBean.class, parentId);//每次查询出上级为的分类System.out.println(list.size());if(list != null && list.size() > 0){for(int i=0;i<list.size();i++){bean = (SortBean)list.get(i);bean.setLevel(level+1); //添加等级字段sortList.add(bean);getSortList(sortList,bean.getSortId(),level+1); //递归查询}}else{level--;}}catch(Exception e){e.printStackTrace();}}测试类:p ublic void test_getSortList() {SortService service = (SortService)beanFactory.getBean("sortService");List<SortBean> sortList = new ArrayList<SortBean>();service.getSortList(sortList, 0L, 0); //起始根节点id为0,等级为0for(SortBean bean: sortList){String str = "";for(int i=0;i<bean.getLevel();i++){str +="——";}System.out.println(str+bean.getSortId() + " " + bean.getParentId() + " " + bean.getSortName());}}查询结果:1000 0 A类|——1001 1000 A类_1|——1003 1001 A类_1_1|——1002 1000 A类_1|——2003 1002 A类_1_1|——2004 2003 A类_1_1_12000 0 B类|——2001 2000 B类_1|——2002 2001 B类_1_1。

java组织树递归详解

java组织树递归详解

java组织树递归详解全文共四篇示例,供读者参考第一篇示例:Java组织树的递归是一种常见且重要的数据结构操作方法,通过递归算法可以方便地遍历和操作组织结构树。

在实际的项目开发中,经常会遇到需要处理组织结构树的情况,比如公司部门架构、树状菜单等。

本文将详细介绍Java组织树递归的原理、实现方式和应用场景。

一、理解组织树在开始讲述组织树的递归之前,首先需要理解什么是组织树。

组织树是一种树形结构,通常用来表示具有层级关系的数据。

比如一个公司的部门架构,可以用一个树形结构来表示,公司为根节点,各个部门为子节点,部门下还可能有子部门或者员工。

树形结构的特点是每个节点都可以有多个子节点,但只有一个父节点,形成了一种层级结构。

二、递归原理递归是一种编程技术,常用于解决问题时,将问题分解成相同类型的子问题,并对子问题进行求解,最终汇总结果。

在处理组织树时,递归的主要原理是通过递归方法,一层一层地对树的每个节点进行遍历,直到叶子节点为止。

递归方法通常需要递归调用自身,以实现对整个树形结构的遍历和操作。

三、组织树递归实现方式在Java中,可以通过递归方法来实现对组织树的遍历和操作。

下面我们以一个简单的示例来说明如何实现组织树的递归:假设有一个部门实体类Department,包含部门ID、部门名称、父部门ID等属性;```javapublic class Department {private Long id;private String name;private Long parentId;// 省略getter和setter方法}```接下来我们定义一个方法,通过递归方式遍历组织树:```javapublic void traverseDepartmentTree(Department department, List<Department> departmentList) {System.out.println(department.getName());List<Department> children = getChildren(department, departmentList);if(children != null && !children.isEmpty()) {for(Department child : children) {traverseDepartmentTree(child, departmentList);}}}private List<Department> getChildren(Department parent, List<Department> departmentList) {List<Department> children = new ArrayList<>();for(Department department : departmentList) {if(parent.getId().equals(department.getParentId())) {children.add(department);}}return children;}```在上面的示例中,traverseDepartmentTree方法接收一个部门对象和部门列表,首先输出当前部门的名称,然后调用getChildren方法获取当前部门的子部门列表,递归遍历子部门,直到叶子节点。

java组织树递归详解-概述说明以及解释

java组织树递归详解-概述说明以及解释

java组织树递归详解-概述说明以及解释1.引言概述部分的内容可以参考以下写法:1.1 概述在软件开发中,组织树递归是一种常见且重要的数据结构和算法,特别适用于涉及组织结构和层级关系的场景。

组织树递归可以帮助我们有效地组织和管理复杂的数据结构,用于表示组织机构、文件目录、分类层级等多种应用场景。

组织树递归的核心思想是通过递归调用,将复杂的问题分解为相对简单的子问题来解决。

通过定义一个递归函数,在函数内部不断调用自身,不断地将问题规模缩小,直到达到终止条件。

这种分而治之的思想可以大大简化问题的解决过程,并且能够很好地利用计算机的存储和运算能力。

本文将详细介绍组织树递归的概念、原理和在Java语言中的实现方式。

首先,我们将对什么是组织树进行解释,介绍递归的基本概念和特点。

然后,我们将着重讨论在Java语言中如何使用递归来实现组织树。

通过具体的代码示例和实践案例,我们将带领读者深入了解组织树递归的优势和使用注意事项。

通过阅读本文,读者将能够全面了解组织树递归在软件开发中的重要性和应用场景,并且能够灵活运用Java语言的递归特性来解决实际问题。

无论是初学者还是有一定经验的开发者,都能够从本文中收获实用而深入的知识,提升自己的编程能力。

接下来,让我们开始深入探索组织树递归吧!1.2 文章结构本篇文章主要围绕Java组织树递归展开讨论,旨在详细介绍组织树的概念和递归的工作原理,并给出Java中实现递归的方法和技巧。

文章结构安排如下:引言部分概述了文章的主题和目的,为读者提供了对整篇文章的总体认识。

概述部分简要介绍了组织树与递归的关系,并提供了本文的整体结构安排。

正文部分是本文的核心内容,分为三个小节。

2.1小节首先解释了什么是组织树,包括组织树的定义和组织树的应用场景。

2.2小节详细介绍了递归的概念,包括递归的定义、递归的基本原理和递归的优缺点。

2.3小节重点讲解了如何在Java中实现递归,包括递归函数的编写和递归的调用方式。

部门树形结构算法—Java递归实现

部门树形结构算法—Java递归实现

部门树形结构算法—Java递归实现将查询到的部门列表数据,进⾏⽗⼦节点树形结构排序该功能适⽤需要树形结构的,不仅仅是部门树步骤:1. 查询数据库,获得所有的部门列表2. 调⽤下⾯的实现⽅法⼀、建表语句CREATE TABLE `dept` (`deptId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(32) DEFAULT NULL COMMENT '部门名称',`parentId` bigint(20) DEFAULT NULL COMMENT '⽗级部门ID',PRIMARY KEY (`deptId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8⼆、Java实体类package com.changge.pojo;import java.util.ArrayList;import java.util.List;/*** 部门实体** @author 长歌*/public class Dept {/*** 部门id*/private String deptId;/*** 部门名称*/private String name;/*** ⽗部门id*/private String parentId;/*** ⼦部门*/private List<Dept> children = new ArrayList<>();// get,set等⽅法省略...三、实现⽅法代码/*** 构建前端所需要树结构** @param depts 部门列表* @return 树结构列表*/public List<Dept> buildDeptTree(List<Dept> depts) {List<Dept> deptList = new ArrayList<>();List<String> deptIdList = new ArrayList<>();for (Dept dept : depts) {deptIdList.add(dept.getDeptId());}for (Dept dept : depts) {// 如果是顶级节点,遍历该⽗节点所有⼦节点if (!deptIdList.contains(dept.getParentId())) {recursionFn(depts, dept);deptList.add(dept);}}if (deptList.isEmpty()) {deptList = depts;}return deptList;}/*** 递归列表* 结束条件为所遍历的节点⽆下⼀级节点** @param list 查询获得的所有部门数据* @param dept 顶级节点*/private void recursionFn(List<Dept> list, Dept dept) {// 得到⼦节点列表List<Dept> childList = getChildList(list, dept);dept.setChildren(childList);for (Dept tChild : childList) {// 如果⼦节点有下⼀级节点,得到下⼀级的节点列表if (hasChild(list, tChild)) {recursionFn(list, tChild);}}}/*** 获得该节点的下⼀级⼦节点列表** @param list 查询获得的所有部门数据* @param dept 顶级节点* @return 顶级节点的下⼀级⼦节点列表*/private List<Dept> getChildList(List<Dept> list, Dept dept) {List<Dept> deptList = new ArrayList<>();for(Dept d:list){// 遍历⾮顶级节点,并获得传⼊参数顶级节点的下⼀级⼦节点列表if (d.getParentId() != null && d.getParentId().equals(dept.getDeptId())) { deptList.add(d);}}return deptList;}/*** 判断是否有⼦节点** @param list 节点列表* @param dept 部门节点* @return Boolean*/private boolean hasChild(List<Dept> list, Dept dept) {return getChildList(list, dept).size() > 0;}。

java 递归树结构通用方法

java 递归树结构通用方法

java 递归树结构通用方法摘要:1.递归树结构概述2.递归树结构的实现方法3.递归树结构的应用场景4.总结正文:递归树结构是一种在计算机科学中广泛应用的数据结构,它的特点是节点之间存在递归关系。

递归树结构在很多算法和程序设计中都有体现,比如二叉搜索树、决策树等。

本文将介绍递归树结构的通用方法,并举例说明其在实际应用中的作用。

一、递归树结构概述递归树是一种特殊的树结构,它的每个节点都有两个子节点,这两个子节点之间存在递归关系。

在实际应用中,递归树可以用来表示具有层次关系的数据,如文件系统、数据压缩等。

递归树结构的特点如下:1.每个节点最多有两个子节点;2.节点之间的连接是有向的;3.根节点没有父节点,叶子节点没有子节点;4.节点之间的距离是递增的。

二、递归树结构的实现方法在Java中,可以通过定义一个类来表示递归树节点,并实现相应的递归方法。

以下是一个简单的递归树结构实现示例:```javaclass RecursiveTreeNode {int value;RecursiveTreeNode left;RecursiveTreeNode right;public RecursiveTreeNode(int value) {this.value = value;this.left = null;this.right = null;}public void display() {if (this.left != null) {this.left.display();}System.out.println(this.value);if (this.right != null) {this.right.display();}}public static void main(String[] args) {RecursiveTreeNode root = new RecursiveTreeNode(1);root.left = new RecursiveTreeNode(2);root.right = new RecursiveTreeNode(3);root.left.left = new RecursiveTreeNode(4);root.left.right = new RecursiveTreeNode(5);root.right.left = new RecursiveTreeNode(6);root.right.right = new RecursiveTreeNode(7);root.display();}}```上述代码定义了一个简单的递归树,并实现了display()方法用于展示树的结构。

java递归遍历树形结构数据 -回复

java递归遍历树形结构数据 -回复

java递归遍历树形结构数据-回复java递归遍历树形结构数据是一种常见的操作,它在许多应用程序中都得到了广泛的应用。

在这篇文章中,我将详细介绍递归遍历树形结构数据的步骤和原理,并提供一些示例代码来帮助读者更好地理解这个过程。

首先,我们需要了解什么是树形结构数据。

树形结构是一种由节点和边组成的数据结构,它具有一个根节点,根节点下面可以有零个或多个子节点。

子节点又可以作为父节点继续拥有自己的子节点,这样便形成了一个有层次结构的数据模型,类似于现实生活中的家谱树。

在Java中,我们可以使用类或接口来表示树形结构数据。

通常,我们会定义一个节点类,用于表示树中的每个节点,该类包含一个值和一个包含子节点的列表。

此外,我们还可以定义一些辅助方法,用于构建树以及遍历树。

那么,接下来让我们来介绍如何使用递归技术来遍历树形结构数据。

请注意,递归是一种函数调用自身的过程,在处理树形结构数据时,它能够非常方便地实现深度优先搜索的效果。

第一步,我们需要编写一个递归函数来遍历树。

此函数将接收一个节点作为参数,并对该节点进行处理,然后递归调用自身以对节点的子节点进行遍历。

这样,我们就可以通过遍历所有的节点来实现对整个树的遍历。

例如,假设我们需要计算树中所有节点的和。

我们可以定义一个名为`calculateSum`的递归函数,它的输入参数是一个节点。

在函数内部,我们首先对当前节点进行处理,比如将其值添加到总和中。

然后,我们使用一个循环来遍历当前节点的所有子节点,并对每个子节点递归调用`calculateSum`函数。

最后,我们将计算得到的总和作为函数的返回值返回。

下面是一个示例代码,演示了如何使用递归遍历树,并计算树中所有节点的值的总和:javapublic int calculateSum(Node node) {int sum = node.getValue();for (Node child : node.getChildren()) {sum += calculateSum(child);}return sum;}在这个示例中,我们首先将根节点的值加入到总和中。

java递归遍历树形结构数据

java递归遍历树形结构数据

java递归遍历树形结构数据Java中递归遍历树形结构数据可以使用递归算法来实现。

以下是一个示例代码:public class TreeNode {private int value;private List<TreeNode> children;public TreeNode(int value) {this.value = value;this.children = new ArrayList<>();}public void addChild(TreeNode child) {children.add(child);}public int getValue() {return value;}public List<TreeNode> getChildren() {return children;}}public class TreeTraversal {public static void main(String[] args) {// 创建树形结构数据TreeNode root = new TreeNode(1);TreeNode node2 = new TreeNode(2);TreeNode node3 = new TreeNode(3);TreeNode node4 = new TreeNode(4);TreeNode node5 = new TreeNode(5);TreeNode node6 = new TreeNode(6);root.addChild(node2);root.addChild(node3);node2.addChild(node4);node2.addChild(node5);node3.addChild(node6);// 递归遍历树形结构数据traverse(root);}public static void traverse(TreeNode node) {System.out.println(node.getValue());for (TreeNode child : node.getChildren()) {traverse(child);}}}以上代码中,我们定义了一个TreeNode类来表示树形结构中的节点,每个节点包含一个值和一个子节点列表。

递归算法结合数据库解析java树形结构

递归算法结合数据库解析java树形结构

递归算法结合数据库解析java树形结构1、准备表结构及对应的表数据a、表结构:create table TB_TREE(CID NUMBER not null,CNAME VARCHAR2(50),PID NUMBER //⽗节点)b、表数据:insert into tb_tree (CID, CNAME, PID) values (1, '中国', 0);insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1);insert into tb_tree (CID, CNAME, PID) values (3, '⼴东省', 1);insert into tb_tree (CID, CNAME, PID) values (4, '上海市', 1);insert into tb_tree (CID, CNAME, PID) values (5, '⼴州市', 3);insert into tb_tree (CID, CNAME, PID) values (6, '深圳市', 3);insert into tb_tree (CID, CNAME, PID) values (7, '海珠区', 5);insert into tb_tree (CID, CNAME, PID) values (8, '天河区', 5);insert into tb_tree (CID, CNAME, PID) values (9, '福⽥区', 6);insert into tb_tree (CID, CNAME, PID) values (10, '南⼭区', 6);insert into tb_tree (CID, CNAME, PID) values (11, '密云县', 2);insert into tb_tree (CID, CNAME, PID) values (12, '浦东', 4);2、TreeNode对象,对应tb_treepublic class TreeNode implements Serializable {private Integer cid;private String cname;private Integer pid;private List nodes = new ArrayList();public TreeNode() {}//getter、setter省略}3、测试数据public class TreeNodeTest {@Testpublic void loadTree() throws Exception{System.out.println(JsonUtils.javaToJson(recursiveTree(1)));}/*** 递归算法解析成树形结构** @param cid* @return* @author jiqinlin*/public TreeNode recursiveTree(int cid) {//根据cid获取节点对象(SELECT * FROM tb_tree t WHERE t.cid=?)TreeNode node = personService.getreeNode(cid);//查询cid下的所有⼦节点(SELECT * FROM tb_tree t WHERE t.pid=?)List childTreeNodes = personService.queryTreeNode(cid);//遍历⼦节点for(TreeNode child : childTreeNodes){TreeNode n = recursiveTree(child.getCid()); //递归node.getNodes().add(n);}return node;}}输出的json格式如下:{"cid": 1,"nodes": [{"cid": 2,"nodes": [{"cid": 11,"nodes": [],"cname": "密云县","pid": 2}],"cname": "北京市","pid": 1},{"cid": 3,"nodes": [{"cid": 5,"nodes": [{"cid": 7,"nodes": [],"cname": "海珠区", "pid": 5},{"cid": 8,"nodes": [],"cname": "天河区", "pid": 5}],"cname": "⼴州市","pid": 3},{"cid": 6,"nodes": [{"cid": 9,"nodes": [],"cname": "福⽥区", "pid": 6},{"cid": 10,"nodes": [],"cname": "南⼭区", "pid": 6}],"cname": "深圳市","pid": 3}],"cname": "⼴东省","pid": 1},{"cid": 4,"nodes": [{"cid": 12,"nodes": [],"cname": "浦东","pid": 4}],"cname": "上海市","pid": 1}],"cname": "中国","pid": 0}。

hutool treeutil原理

hutool treeutil原理

hutool treeutil原理1. 什么是Hutool TreeUtil?Hutool TreeUtil是一个Java工具包中的一个类库,用于处理树形结构的数据。

它提供了一组方法,用于构建、操作和遍历树形数据。

树形数据结构通常用于表示层次关系,例如组织机构、文件系统,或是菜单和权限等。

2. TreeUtil的主要功能是什么?TreeUtil提供了多种方法,用于对树形数据进行一系列的操作,包括:a) 构建树形结构:可以根据传入的节点列表,构建出一棵树形结构。

每个节点都包含一个唯一的标识符和对父节点的引用。

b) 获取根节点:可以根据传入的节点列表,返回树的根节点。

c) 查找节点:可以根据节点的唯一标识符,在树中查找指定的节点。

d) 遍历树:提供了多种遍历树的方式,包括前序遍历、中序遍历、后序遍历和层序遍历。

可以用来处理树形结构中的节点。

e) 添加节点:可以在树中添加新的节点,将其插入到指定的位置。

f) 删除节点:可以从树中删除节点,并自动调整树形结构。

g) 修改节点:可以修改树中已有节点的属性值。

h) 生成树形字符串:可以将树形结构以字符串的形式输出,方便查看和调试。

3. TreeUtil的原理是什么?TreeUtil的核心原理是使用递归算法来构建和操作树形结构。

其基本思路如下:a) 构建树形结构:根据节点列表,递归地查找每个节点的父节点,将子节点添加到相应的父节点上。

首先,从节点列表中找到没有父节点的根节点,然后递归地添加子节点。

b) 获取根节点:根据节点列表,遍历每个节点,找到没有父节点的根节点。

c) 查找节点:采用递归算法,在树的每个节点上查找指定的节点,直到找到为止。

d) 遍历树:使用递归算法,按照特定的方式遍历树的节点,可以根据需要选择前序遍历、中序遍历、后序遍历或层序遍历。

e) 添加节点:根据节点的唯一标识符,递归地查找要添加节点的位置,并将其插入到相应的位置上。

f) 删除节点:根据节点的唯一标识符,递归地查找要删除节点的位置,并将其从树中删除。

java递归遍历树形结构数据 -回复

java递归遍历树形结构数据 -回复

java递归遍历树形结构数据-回复Java递归遍历树形结构数据树形结构是计算机科学中常见的一种数据结构,它由节点和边组成,其中一个节点可以有多个子节点,而子节点可以继续有自己的子节点,形成一个层级关系。

在实际应用中,树形结构可以用来表示文件系统、组织架构、HTML文档等。

在Java中,我们经常需要对树形结构数据进行遍历,从而完成各种操作,比如查找特定节点、计算某个属性的总和等。

递归是一种有效的方式来遍历树形结构数据,它能够简化代码,并且解决多层嵌套的问题。

本文将详细介绍如何使用递归来遍历树形结构数据,并且提供一些实际应用场景的案例。

一、递归的基本原理在讨论递归遍历树形结构之前,我们先来了解一下递归的基本原理。

递归是一种自身调用的过程,在每一层递归中,函数会调用自己来执行相同的操作,直到满足某个终止条件才停止递归。

递归可以分为两个阶段:递归调用和回溯。

递归调用是指函数在执行过程中调用自己,而回溯则是指函数在执行完毕后返回到上一层调用的位置。

递归的基本原理可以用以下伪代码表示:javavoid recursiveFunc(Parameter p) {1. 检查终止条件if (p meets termination condition) {执行终止操作return;}2. 执行当前层逻辑process(p);3. 向下一层递归recursiveFunc(p.next);4. 回溯}在上述伪代码中,`recursiveFunc`是一个递归函数,它接受一个参数`p`作为输入。

在函数的开头,我们会检查终止条件,如果满足条件,则执行终止操作并返回。

否则,我们会执行当前层逻辑,并且通过递归调用`recursiveFunc`来进入下一层。

二、树形结构数据的表示在Java中,我们可以使用类来表示树形结构数据。

通常,我们会定义一个`TreeNode`类,它包含了存储在节点中的数据以及指向子节点的引用。

下面是一个简单的`TreeNode`类的定义:javaclass TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val = val;}}在这个类中,`val`字段存储了节点中的数据,`left`和`right`字段分别指向左子节点和右子节点。

java 树形结构递归实现

java 树形结构递归实现

java 树形结构递归实现在编程中,树形结构是一种非常常见的数据结构,它由节点和边组成,可以用于表示层次化的数据关系。

在 Java 中,我们可以通过递归来实现树形结构的数据操作。

接下来,我们将逐步介绍如何使用Java 递归来实现树形结构。

1. 定义树的节点类首先,我们需要定义树形结构的节点类。

一个节点类通常包含一个值以及左右子节点。

它的定义如下:```javapublic class TreeNode {int value;TreeNode left;TreeNode right;public TreeNode(int value) {this.value = value;left = null;right = null;}}```2. 插入节点接下来,我们需要实现向树中插入节点的方法。

算法思路是,从根节点开始比较,如果值比当前节点小,在其左子树中查找,否则在右子树中查找。

直到找到一个空位,将新节点插入进去。

实现代码如下:```javapublic void insert(TreeNode root, int value) {if (value < root.value) {if (root.left == null) {root.left = new TreeNode(value);} else {insert(root.left, value);}} else {if (root.right == null) {root.right = new TreeNode(value);} else {insert(root.right, value);}}}```3. 遍历树我们可以使用三种遍历方法来遍历树的节点:先序遍历(preorder):根节点 -> 左子树 -> 右子树中序遍历(inorder):左子树 -> 根节点 -> 右子树后序遍历(postorder):左子树 -> 右子树 -> 根节点以下是先序遍历代码的实现:```javapublic void preorder(TreeNode root) {if (root != null) {System.out.print(root.value + " ");preorder(root.left);preorder(root.right);}}```中序遍历和后序遍历的代码实现也非常类似,读者可以自行尝试实现。

java树形递归

java树形递归

java树形递归Java树形递归指的是使用递归算法遍历树形数据结构(如二叉树、多叉树、以及深度优先搜索遍历模式下的图等)的一种方法。

在Java中,我们可以通过递归函数来实现树的遍历和构建,这种方法可以帮助我们快速高效地处理大量的数据。

Java树形递归的基本思想就是以树的根节点为起点开始递归,依次处理根节点的每一个子节点,并且对于每个子节点都采用递归的方式继续遍历它的所有子节点。

Java 树形递归常常被用于处理需要对大量数据进行筛选、统计或者遍历的情况,尤其是在处理多级目录结构或者数据库中关联表的数据时。

在Java树形递归过程中,我们需要借助许多数据结构,如链表、队列等来保存遍历的节点信息,方便我们快速地找到需要遍历的节点。

同时,我们还需要定义好遍历的方式,这样才能保证我们所遍历的节点顺序是正确的。

Java树形递归的具体实现方法有以下几种:1. 前序遍历前序遍历是指先遍历根节点,然后遍历左子树和右子树。

在Java中,我们可以采用递归函数的方式实现前序遍历,具体实现方法如下:``` public void preorderTraversal(TreeNoderoot) { if (root == null){ return; } // 处理当前节点System.out.println(root.val); // 遍历左子树preorderTraversal(root.left); // 遍历右子树preorderTraversal(root.right); } ```2. 中序遍历中序遍历是指先遍历左子树,然后遍历根节点,再遍历右子树。

在Java中,我们可以采用递归函数的方式实现中序遍历,具体实现方法如下:``` public void inorderTraversal(TreeNode root) { if (root == null) { return; } // 遍历左子树 inorderTraversal(root.left);// 处理当前节点 System.out.println(root.val); // 遍历右子树 inorderTraversal(root.right); }```3. 后序遍历后序遍历是指先遍历左子树,然后遍历右子树,最后遍历根节点。

Java递归查询部门树形结构数据的实践

Java递归查询部门树形结构数据的实践

Java递归查询部门树形结构数据的实践说明:在开发中,我们经常使⽤树形结构来展⽰菜单选项,如图:那么我们在后端怎么去实现这样的⼀个功能呢?1、数据库表:department2、编写sql映射语句<select id="selectDepartmentTrees" resultType="com.welb.entity.Department">select * from department<where><if test="updepartmentcode!=null">and UpDepartmentCode=#{updepartmentcode}</if></where></select>3、创建实体类public class Department {private String departmentcode;//部门codeprivate String departmentname;//部门名称private String updepartmentcode="0";//上级部门private String departmentdesc;//部门描述private List<Department> childDept =new ArrayList();//部门信息树public String getDepartmentcode() {return departmentcode;}public void setDepartmentcode(String departmentcode) {this.departmentcode = departmentcode == null ? null : departmentcode.trim();}public String getDepartmentname() {return departmentname;}public void setDepartmentname(String departmentname) {this.departmentname = departmentname == null ? null : departmentname.trim();}public String getUpdepartmentcode() {return updepartmentcode;}public void setUpdepartmentcode(String updepartmentcode) {this.updepartmentcode = updepartmentcode == null ? null : updepartmentcode.trim();}public String getDepartmentdesc() {return departmentdesc;}public void setDepartmentdesc(String departmentdesc) {this.departmentdesc = departmentdesc == null ? null : departmentdesc.trim();}public List<Department> getChildDept() {return childDept;}public void setChildDept(List<Department> childDept) {this.childDept = childDept;}}4、定义mapper@Mapperpublic interface DepartmentMapper {List<Department>selectDepartmentTrees(Department department);}5、定义service业务层实现@Service@Transactionalpublic class DepartmentImpl implements IDepartmentService {@ResourceDepartmentMapper departmentMapper;@Overridepublic List<Department> selectDepartmentTrees(Department department) {return departmentMapper.selectDepartmentTrees(department);}}6、控制层实现@RestController@RequestMapping("department")public class DepartmentController {@ResourceIDepartmentService departmentService;@ResourceIStationService stationService;/*** 查询所有部门树形展⽰所有部门包含模糊查詢** @return*/@RequestMapping("/treelist")public Object selectAll(Department department) {ModelMap map = new ModelMap();try {List<Department> departmentDtos = getDepartmentList(department);map.put("msg", "查询部门成功");map.put("data", departmentDtos);map.put("code", 0);} catch (Exception e) {e.printStackTrace();map.put("msg", "查询部门失败");map.put("code", 1);}return map;}/*** 递归查询部门* @param department* @return*/private List<Department> getDepartmentList(Department department) {List<Department> departments =departmentService.selectDepartmentTrees(department); if (departments.size()>0){Department department1=new Department();for (int i = 0; i <departments.size() ; i++) {department1.setUpdepartmentcode(departments.get(i).getDepartmentcode());List<Department>dtos=getDepartmentList(department1);departments.get(i).setChildDept(dtos);}}return departments;}}7、进⾏测试,这⾥我⽤postmain⼯具测试,结果如下图到这⾥,递归查询部门树形结构数据就完成了到此这篇关于Java 递归查询部门树形结构数据的实践的⽂章就介绍到这了,更多相关Java 递归查询树形结构内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

java递归展示树形图代码实现以及遇到的问题

java递归展示树形图代码实现以及遇到的问题

java递归展⽰树形图代码实现以及遇到的问题我最近写到了⼀个项⽬中⽤到了树形图,不得不说这个树形图是真的扯淡;我⽤到的是layui中的树形图,再展⽰数据过程中遇到了很多的问题,废话不多说,直接贴代码。

⼀、调⽤排序接⼝,对数据进⾏排序。

⼆、⽣成树结构public static List<TreeVo> findTree(List<WfUnit> allMenu){ //这⾥TreeVo是我写了⼀个跟layui树形图结构⼀样结构的实体类,WfUnit是我数据库表的实体类。

//查询所有菜单//根节点try {List<TreeVo> tree = new ArrayList<>();for (WfUnit nav : allMenu) {System.out.println(nav.getOwnerunitid());if (nav.getOwnerunitid().equals("0")) {//⽗节点是0的,为根节点,这⾥getOwnerunitid是我关联id⾃连接。

TreeVo t = new TreeVo();t.setId(nav.getUnitid());t.setName(nav.getUnitname());t.setLevel(nav.getUnitlevel());t.setOwnerunitid(nav.getOwnerunitid());t.setSequence(nav.getUnitsequence());tree.add(t);}}/* 根据实体类的树等级排序 */Collections.sort(tree, Level());//为根菜单设置⼦菜单,getClild是递归调⽤的for (TreeVo nav : tree) {/* 获取根节点下的所有⼦节点使⽤getChild⽅法*/List<TreeVo> childList = getChild(nav.getId(), allMenu);System.out.println(childList);nav.setChildren(childList);//给根节点设置⼦节点}return tree;} catch (Exception e) {return null;}}三、遍历⼦树/*** 获取⼦节点* @param id ⽗节点id* @param allMenu 所有菜单列表* @return 每个根节点下,所有⼦菜单列表*/public static List<TreeVo> getChild(String id,List<WfUnit> allMenu){if(allMenu.size() == 0){ //这⾥⽤来结束循环,⼀开始我⽤的for循环,发现会进⼊死循环,然后换成了迭代器。

java 树形结构的章节

java 树形结构的章节

java 树形结构的章节Java中的树形结构通常可以通过树(Tree)或者树节点(TreeNode)类来实现。

树结构是一种非线性数据结构,它由节点和边组成,每个节点有零个或多个子节点,其中一个节点被指定为根节点,其他节点分层次地连接到根节点。

在Java中,可以使用类来表示树节点,每个节点包含一个值和指向其子节点的引用。

以下是一些常见的树形结构及其在Java中的实现:1. 二叉树(Binary Tree),每个节点最多有两个子节点,分别为左子节点和右子节点。

在Java中,可以使用类来表示节点,包含值和左右子节点的引用。

可以通过递归或者迭代的方式实现二叉树的遍历和操作。

2. 二叉搜索树(Binary Search Tree, BST),是一种特殊的二叉树,对于每个节点,其左子树上的所有节点的值都小于该节点的值,右子树上的所有节点的值都大于该节点的值。

在Java中,可以通过递归或者迭代的方式实现BST的插入、删除和查找操作。

3. 平衡二叉树(AVL Tree),是一种自平衡的二叉搜索树,保持左右子树的高度差不超过1,以确保插入、删除等操作的时间复杂度不会偏离O(logn)。

在Java中,可以通过旋转操作来实现平衡二叉树的自平衡。

4. B树(B-tree)和B+树(B+ tree),是一种多路搜索树,常用于数据库和文件系统中。

在Java中,可以通过节点和指针的方式来实现B树和B+树,保持节点的平衡和有序性。

以上是一些常见的树形结构及其在Java中的实现方式。

除了上述提到的树形结构外,还有很多其他类型的树,如红黑树、Trie树等,它们在Java中的实现方式也各有特点。

希望这些信息对你有所帮助。

java递归生成树结构的数据

java递归生成树结构的数据

java递归⽣成树结构的数据@Data@EqualsAndHashCode(callSuper =true)@ApiModel(value = "AccountCaptionVo", description = "会计科⽬")public class AccountCaptionVo extends BaseModel {@ApiModelProperty(value ="会计科⽬名称",name = "captionName")private String captionName;@ApiModelProperty(value = "会计科⽬编码",name = "captionCode")private String captionCode;@ApiModelProperty(value = "⽗类编码",name = "parentId")private Long parentId;@ApiModelProperty(value = "系统科⽬",name = "systematicSubjects")private String systematicSubjects;@ApiModelProperty(value = "借贷⽅向",name = "lendingDirection")private String lendingDirection;@ApiModelProperty(value = "⼦集",name = "children")private List<AccountCaptionVo> children;@ApiModelProperty(value = "科⽬名称助记码",name = "mnemonicCode")private String mnemonicCode;public static List<AccountCaptionVo> listToTree(List<AccountCaptionVo> list) {//⽤递归找⼦。

java使用递归算法快速封装树形结构

java使用递归算法快速封装树形结构

java使⽤递归算法快速封装树形结构⼀、创建实体类@Data@ToStringpublic class CatalogVO {private Integer id;private Integer panelsId;private String catalogName;private Integer parentId;private Integer isDeleted;private String createdUser;private Date createdTime;List chirldren = new ArrayList<>();} 创建⼀个实体类CatalogVO,在实体类中创建⼀个List 对象,⽤它来存储chirldren(⼦节点),并且引⼊⾃⾝作为泛型。

⼆、数据库设计通过数据库结构可以看出,这⾥我只是简单的使⽤parent_id 和 id 进⾏层级关联。

三、service层从数据库读取数据,然后使⽤递归算法将原始数据进⾏重新封装。

/*** 获取⽂档⽬录的树形结构* @param panelsId* @return*/@Overridepublic List<CatalogVO> getDetailTree(int panelsId) {QueryWrapper<FileCatalog> wrapper = new QueryWrapper<>();wrapper.eq("panels_id", panelsId);List<FileCatalog> fileCatalogs = fileCatalogMapper.selectList(wrapper);List<CatalogVO> lists = new ArrayList<>();for (FileCatalog fileCatalog : fileCatalogs) {CatalogVO vo = new CatalogVO();try {BeanUtils.copyProperties(vo,fileCatalog);lists.add(vo);} catch (IllegalAccessException | InvocationTargetException e) {e.printStackTrace();}}List<CatalogVO> tree = createTree(lists, 0);return tree;}/*** 递归建⽴树形结构(算法)* @param lists* @param pid* @return*/private List<CatalogVO> createTree(List<CatalogVO> lists, int pid) { List<CatalogVO> tree = new ArrayList<>();for (CatalogVO catelog : lists) {if (catelog.getParentId() == pid) {catelog.setChirldren(createTree(lists,catelog.getId()));tree.add(catelog);}}return tree;}四、前台请求资源。

java递归遍历树形结构

java递归遍历树形结构

java递归遍历树形结构
Java递归遍历树形结构是指使用递归算法去遍历一个树形结构。

它可以被应用于各种数据结构,如文件夹目录、XML文档、HTML文档等,甚至可以用于神经网络中的前向传播算法。

首先,要理解什么是树形结构,它是一种分层的有向图,具有根节点、子节点和子节点的孩子节点。

树形结构由节点和边组成,每个节点都有一个父节点,除了根节点。

树形结构中可能有多个子节点,每个子节点又可以有多个孩子节点。

Java递归遍历树形结构的步骤如下:
1. 确定根节点:第一步,需要确定树形结构的根节点,即父节点。

2. 遍历子节点:然后,开始遍历根节点的子节点,并检查每个子节点是否有子节点。

3. 如果有子节点:如果子节点有子节点,则递归地遍历该子节点,直到所有节点均被遍历完毕。

4. 返回父节点:最终,当所有子节点都被遍历完毕,返回父节点,继续遍历其他子节点。

5. 遍历完毕:当根节点的所有子节点都被遍历完毕时,表明整个树形结构已经被遍历完毕。

使用递归遍历树形结构的一个重要好处是,它可以很容易地实现树形结构的深度优先遍历。

也就是说,它可以先深入地搜索树形结构的子节点,然后再回溯父节点,最终完成整个树形结构的遍历。

另外,使用Java构建递归遍历树形结构还有另一个好处,就是可以使用函数式编程(Functional Programming)来实现,允许把功能封装在一个函数中,而不必为每个节点编写代码。

总而言之,Java递归遍历树形结构是一种高效的方法,可以有效地搜索和遍历树形结构中的信息,从而更快地完成某些任务。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

表结构
/**
* 删除部门删除时从选中级的所有子级
*
* @param dept
* @return
*/
public JsonResult delDept(Dept dept) {
JsonResult jr = new JsonResult();
Boolean flags=true;
try {
String str = "";
User user=new User();
List<Dept> sortList = new ArrayList<Dept>();
sortList.add(dept);
getDeptSortList(sortList,dept.getId()); //起始根节点id,等级为0
for(Dept bean: sortList){
user.setDeptId(bean.getId()); //判断部门下面是否有用户
List<User> users =userDao.getByDeptIdIsUerOrNO(user);
int userSize=users.size();
if(userSize>0){
jr.setMessage("部门名称:(" + users.get(0).getDeptName() + ")已有用户不能删除");
flags=false;
break;
}
}
//部门没有被用户使用时才可以册子
if(flags){
for(Dept bean: sortList){
dept.setId(bean.getId());
deptDao.delDept(dept);
jr.setMessage(SuccessMessageEnum.detele.toDescription());
}
}
jr.setSuccess(true);
} catch (Exception e) {
log.error("DeptServiceImpl-->delDept:" + e.getMessage());
jr.setCode(ExceptionEnum.SystemError.toCode());
jr.setMessage(e.getMessage());
}
return jr;
}
/**
* 删除时递归部门树
*
* @param
* @return
*/
public void getDeptSortList(List<Dept> sortDeptList,Integer parentId)throws Exception { Dept bean = null;
//根据选中的部门id得到本部门和第一级所有的子部门的id
List<Dept> deptslist=deptDao.getByDeptIdAllSubDeptId(parentId); //;//每次查询出上级为的分类
// int deptSize=deptslist.size();
if(deptslist.size() > 0){
for(int i=0;i<deptslist.size();i++){
bean = (Dept)deptslist.get(i);
sortDeptList.add(bean);
getDeptSortList(sortDeptList,bean.getId()); //递归查询
}
}
}
<select id="getByDeptIdAllSubDeptId" resultClass="Dept">
select id from report_sys_dept where parent_id=#value#
</select>
<!-- 根据ID删除级联子树,-->
<delete id="delDept" parameterClass="Dept">
delete from report_sys_dept where id = #id#;
</delete>
事例二
表结构为:
分类Id SortId
所属分类Id ParentID
分类名称SortName
分类描述SortDesc
测试数据:
1000 0 A类A类
1001 1000 A类_1 A类_1
1002 1000 A类_1 A类_1
1003 1001 A类_1_1 A类_1_1
2000 0 B类B类
2001 2000 B类_1 B类_1
2002 2001 B类_1_1 B类_1_1
2003 1002 A类_1_1 A类_1_1
2004 2003 A类_1_1_1 A类_1_1_1
java代码:
(SortBean类略)
/**
* 查询分类的树型结构
*/
p ublic void getSortList(List<SortBean> sortList, Long parentId,int level){
SortBean bean = null;
List<SortBean> list = new ArrayList<SortBean>();
String sql = "Select * from sort_ s where s.parentId = ?";
try{
System.out.println("sql:"+sql);
list = (List<SortBean>)jdbcDao.queryBeanList(sql, SortBean.class, parentId);//每次查询出上级为的分类
System.out.println(list.size());
if(list != null && list.size() > 0){
for(int i=0;i<list.size();i++){
bean = (SortBean)list.get(i);
bean.setLevel(level+1); //添加等级字段
sortList.add(bean);
getSortList(sortList,bean.getSortId(),level+1); //递归查询
}
}else{
level--;
}
}catch(Exception e){
e.printStackTrace();
}
}
测试类:
p ublic void test_getSortList() {
SortService service = (SortService)beanFactory.getBean("sortService");
List<SortBean> sortList = new ArrayList<SortBean>();
service.getSortList(sortList, 0L, 0); //起始根节点id为0,等级为0
for(SortBean bean: sortList){
String str = "";
for(int i=0;i<bean.getLevel();i++){
str +="——";
}
System.out.println(str+bean.getSortId() + " " + bean.getParentId() + " " + bean.getSortName());
}
}
查询结果:
1000 0 A类
|——1001 1000 A类_1
|——1003 1001 A类_1_1
|——1002 1000 A类_1
|——2003 1002 A类_1_1
|——2004 2003 A类_1_1_1
2000 0 B类
|——2001 2000 B类_1
|——2002 2001 B类_1_1。

相关文档
最新文档