/**
* 把嵌套树结构 Tree 转成 Graph 图结构
*
* @param tree Tree
* @return Graph
*/
public static GraphVO tree2graph(ItemVO tree) {
List<EdgeDO> edgeList = new ArrayList<>();
buildEdges(tree, edgeList);
final List<ItemVO> nodeList = new ArrayList<>();
visitTree(tree, t -> {
ItemVO node = new ItemVO();
BeanUtils.copyProperties(t, node);
// 图节点,children 置为空
node.children = new ArrayList<>();
nodeList.add(node);
});
GraphVO graph = new GraphVO();
graph.setEdgeList(edgeList);
graph.setItemList(nodeList);
return graph;
}


/**
* 访问者模式,递归遍历树节点
*
* @param t 树节点
* @param visitor 访问者
*/
private static void visitTree(ItemVO t, TreeVisitor visitor) {
visitor.visit(t);
if (null != t.children) {
for (ItemVO child : t.children) {
visitTree(child, visitor);
}
}
}

Kotlin 开发者社区


[递归+访问者模式]实现树状结构的节点遍历处理_node.js


国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin 编程语言、Spring Boot、Android、React.js/Node.js、函数式编程、编程思想等相关主题。

越是喧嚣的世界,越需要宁静的思考。