JAVA保存有上下级关系的数据_java 用递归实现球上下级(牵涉到对上级的去重)...

本文通过JAVA实现了一个递归算法,用于找出具有上下级关系的数据中,指定人员的所有上级,并在存在相同等级时,只保留第一个有效上级。代码中模拟了人员关系,并通过fun2方法进行递归查询。
摘要由CSDN通过智能技术生成

package org.training.shiyanlou;

import java.lang.reflect.Array;

import java.util.ArrayList;

import java.util.HashMap;

/**

* Created by chaozhang on 2018/2/2.

*

* 最近遇到一个问题需要用到SparkStreaming 算出某个角色的所有的上级,同时党上级的等级数是一样的时候第一个才有效,

* 我想到了用递归实现。

* 一 JAVA 递归算法

*/

public class DiGui {

// 存放此人的所有leader,

private static ArrayList leadList = new ArrayList();

// 模拟出所有人的关系,key代表id, value由leader的id和自己的等级(level)构成。

private static HashMap map = new HashMap();

public static void main(String[] args) {

// 模拟出所有人的关系

//key代表id, value由leader的id和自己的等级(level)构成。

map.put(1,"2|a");// id为1的leader ID为2

map.put(2,"3|c");

map.put(3,"4|c");

map.put(4,"5|c");

map.put(5,"6|d");

map.put(6,"-1|e&

Java中,当处理码表数据,其中包含上级和下关系时,通常可以使用递归来构建树形结构。这种场景通常涉及到层数据,例如部门、员工关系等,每个节点有上级ID关联到另一个节点。以下是一个基本的步骤: 1. 定义一个树节点类(Node),包含字段如id、name(名称)、parent(上级节点的引用)等。 ```java class TreeNode { int id; String name; TreeNode parent; // 上级节点引用 List<TreeNode> children; // 子节点列表 // 构造函数、getter和setter省略 } ``` 2. 创建一个辅助方法,用于递归地查找并添加子节点。这个方法需要接收当前节点、父节点ID以及所有已访问过的节点集合,避免无限循环。 ```java public TreeNode buildTree(TreeNode node, int parentId, Set<Integer> visited) { if (visited.contains(node.id)) { return null; // 如果已经访问过,跳过 } visited.add(node.id); // 遍历码表数据,找到上级ID等于当前节点ID的子节点 for (TreeNode child : codeTable) { if (child.parentId == node.id) { // 创建子节点,并设置上级为当前节点 TreeNode childNode = new TreeNode(child.id, child.name); childNode.parent = node; // 递归调用自身,继续构建子节点的树 childNode.children.addAll(buildTree(child, node.id, visited)); node.children.add(childNode); // 将子节点添加到当前节点的children列表中 } } return node; } ``` 3. 最后,在根节点上开始递归过程: ```java List<TreeNode> codeTable = ...; // 码表数据 Set<Integer> visited = new HashSet<>(); TreeNode root = buildTree(findRoot(codeTable), -1, visited); // 找到根节点并开始构建 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值