美文网首页禅与计算机程序设计艺术Java Web 核心技术Kotlin 开发者社区
Kotlin 树状结构的遍历 & 递归构建一棵树源代码实

Kotlin 树状结构的遍历 & 递归构建一棵树源代码实

作者: 光剑书架上的书 | 来源:发表于2019-07-03 22:46 被阅读2次
    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、函数式编程、编程思想等相关主题。

    Kotlin 开发者社区

    相关文章

      网友评论

        本文标题:Kotlin 树状结构的遍历 & 递归构建一棵树源代码实

        本文链接:https://www.haomeiwen.com/subject/pbmhhctx.html