Kotlin 树状结构的遍历 & 递归构建一棵树源代码实
2019-07-03 本文已影响2人
光剑书架上的书
![](https://img.haomeiwen.com/i1233356/28f274e9de03c677.png)
package com.ak47.cms.cms.tree
import com.ak47.cms.cms.vo.TreeVO
object TreeUtil {
/**
* 递归遍历树
* @param node 当前树节点
* @param visitor 游历函数
*/
fun visitTree(node: TreeVO, visitor: (TreeVO) -> Unit) {
// 调用游历函数
visitor(node)
node.children.forEach {
visitTree(it, visitor)
}
}
/**
* 根据节点列表,递归构建一棵树
* @param nodes 节点列表
* @param category 树的类型
*/
fun buildTree(nodes: List<TreeVO>, category: TreeCategory): TreeVO {
val treeNodes = mutableListOf<TreeVO>()
val rootNodes = nodes.filter { it.parentCode == "-1" && it.category == category.name }
rootNodes.forEach {
buildChildren(it, nodes)
treeNodes.add(it)
}
val treeVO = TreeVO()
treeVO.children = treeNodes
treeVO.category = TreeCategory.COUNTRY.name
treeVO.name = TreeCategory.COUNTRY.name
return treeVO
}
/**
* 递归构建当前节点的的孩子列表
* @param node 当前节点
* @param nodes 节点列表
*/
private fun buildChildren(node: TreeVO, nodes: List<TreeVO>) {
val nodeCode = node.code
val children = nodes.filter { it.parentCode == nodeCode }
children.forEach {
buildChildren(it, nodes)
}
node.children = children
}
}
其中, TreeVO 代码如下
package com.ak47.cms.cms.vo
class TreeVO {
var code: String = ""
var parentCode: String = ""
var name: String = ""
var category: String = ""
var children: List<TreeVO> = mutableListOf()
}
前端的效果采用 d3.tree.js
源代码工程
https://github.com/AK-47-D/cms-spider
分支: i9102_20190407
Kotlin 开发者社区
国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin 编程语言、Spring Boot、Android、React.js/Node.js、函数式编程、编程思想等相关主题。