扁平结构转化树形结构

很好的一篇文章:https://segmentfault.com/a/1190000020732216

1、树形结构数据:

tree:[{

"id": 2,

"name": "测试一号店",

"parentId": 0,

},

{

"id": 111,

"name": "李先生测试",

"parentId": 0,

},

{

"id": 1,

"name": "测试店",

"parentId": 0,

},

{

"id": 17,

"name": "Jennifer Hernandez",

"parentId": 0,

},

{

"id": 18,

"name": "Deborah Johnson",

"parentId": 0,

},

{

"id": 13,

"name": "测试门店名称",

"parentId": 0,

},

{

"id": 14,

"name": "测试门店名称2233",

"parentId": 2,

},

{

"id": 4,

"name": "测试三号店",

"parentId": 1,

},

{

"id": 3,

"name": "测试二号点",

"parentId": 1,

}]

2、转换方式:

listToTree (list, options = {}){

const {

keyField = 'id',

childField = 'children',

parentField = 'parentId'

} = options

const tree = []

const record = {}

for (let i = 0, len = list.length; i < len; i++) {

const item = list[i]

const id = item[keyField]

if (!id) {

continue

}

if (record[id]) {

item[childField] = record[id]

} else {

item[childField] = record[id] = []

}

if (item[parentField]) {

const parent = item[parentField]

if (!record[parent]) {

record[parent] = []

}

record[parent].push(item)

} else {

tree.push(item)

}

}

return tree

},

### Java 中树形结构扁平化的方法 在Java中,可以采用递归的方式将树形结构的数据转换为扁平列表。这种方法不仅适用于二叉树,也适合多叉树或其他类型的树状数据结构。 #### 使用递归函数实现树形结构到列表的转化 下面是一个具体的例子,展示如何编写一个通用的`flattenTreeToList()`方法来完成这一过程: ```java import java.util.ArrayList; import java.util.List; class TreeNode { int id; String name; List<TreeNode> children; public TreeNode(int id, String name) { this.id = id; this.name = name; this.children = new ArrayList<>(); } } public class TreeFlattener { /** * 将树形结构扁平化为列表. * * @param root 树根节点 * @return 扁平后的列表 */ private static List<String> flattenTreeToList(TreeNode root) { List<String> result = new ArrayList<>(); // 添加当前节点的信息至结果集中 if (root != null) { result.add("ID:" + root.id + ", Name:" + root.name); // 对于每一个子节点调用自身继续向下遍历 for (TreeNode child : root.children) { result.addAll(flattenTreeToList(child)); } } return result; } } ``` 此代码片段定义了一个名为 `TreeNode` 的类用于表示单个节点,并提供了一种机制——即通过静态成员变量 `children` 来维护其所有的直接后代节点。接着,在 `TreeFlattener` 类里实现了 `flattenTreeToList()` 函数,它接收一棵由 `TreeNode` 组成的树作为输入参数并返回包含所有节点信息(这里简化为字符串形式)的一维列表[^1]。 对于更复杂的需求,比如保留父子关系或者特定字段,则可以在上述基础上调整逻辑以满足实际应用场景的要求。例如,如果希望得到的结果不仅仅是简单的路径描述而是带有层级信息的对象集合,那么就需要修改 `result.add(...)` 部分的内容以便保存更多细节[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值