java多叉树简单了解
生成树的几种方法
递归生成一棵树
/**
* 递归生成一棵树
*
* @param root 根节点
* @param all 所有子节点
* @author cuishilei
* @date 2018/7/10
*/
public static void generateTreeRecursion(OrgTree root, List<OrgTree> all) {
all.stream()
.filter(node -> node.getParentId() != null && node.getParentId().equals(root.getId()))
.forEach(node -> {
root.addChild(node);
generateTreeRecursion(node, all);
});
}
依靠栈生成树结构
/**
* 依靠栈生成树结构
*
* @param rootList 根结点
* @param all 所有结点
*/
public static void getTreeByStack(List<OrgTree> rootList, List<OrgTree> all) {
Stack<OrgTree> stack = new Stack<>();
rootList.forEach(stack::push);
while (!stack.isEmpty()) {
OrgTree parentNode = stack.pop();
List<OrgTree> childs = all.stream()
.filter(p -> p.getParentId().equals(parentNode.getId()))
.collect(Collectors.toList());
parentNode.addChild(childs);
childs.forEach(stack::push);
}
}
转为map生成树形结构
/**
* 转为map生成树形结构
*
* @param root
* @param all
* @author cuishilei
* @date 2018/9/14
*/
public static void getTreeByMap(OrgTree root, List<OrgTree> all) {
all.add(root);
Map<Long, OrgTree> nodeMap = all.stream().collect(
Collectors.toMap(OrgTree::getId, p -> p));
for (OrgTree treeNode : nodeMap.values()) {
if (nodeMap.containsKey(treeNode.getParentId())) {
OrgTree parentNode = nodeMap.get(treeNode.getParentId());
parentNode.addChild(treeNode);
}
}
}
节点bean的代码
@Data
public class OrgTree {
/**
* 节点id
*/
private Long id;
/**
* 节点名称
*/
private String label;
/**
* 父节点id
*/
private Long parentId;
private List<OrgTree> children = new ArrayList<>();
/**
* 添加子节点
*
* @param child
* @author cuishilei
* @date 2018/9/17
*/
public void addChild(OrgTree child) {
this.children.add(child);
}
/**
* 批量添加子节点
*
* @param childs
* @author cuishilei
* @date 2018/9/17
*/
public void addChild(List<OrgTree> childs) {
if (childs != null) {
this.children.addAll(childs);
}
}
}
TODO…
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rockeycui@163.com
文章标题:java多叉树简单了解
文章字数:331
本文作者:崔石磊(RockeyCui)
发布时间:2018-09-13, 22:32:16
原始链接:https://cuishilei.com/java多叉树简单了解.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。