#java实现创建树
##以下是一个 Java 实现用递归创建树,并提供接口根据树的等级查找它所有上一级的节点 name,一直到根级,存在 list 数组中的示例代码:
public class TreeNode {
private String name;
private int level;
private List<TreeNode> children;
// 构造方法、getters 和 setters 略
}
public class TreeUtils {
/**
* 递归创建树
*
* @param nodes 待创建树的节点列表
* @param level 当前节点的层数
* @return 根节点
*/
public static TreeNode createTree(List<TreeNode> nodes, int level) {
TreeNode root = new TreeNode();
root.setLevel(level);
root.setName("Root"); // 根节点的名字可以自定义
// 如果没有节点了,直接返回根节点
if (nodes == null || nodes.isEmpty()) {
return root;
}
List<TreeNode> children = new ArrayList<>();
for (TreeNode node : nodes) {
// 如果节点的层数等于当前层数,把它作为当前节点的子节点
if (node.getLevel() == level) {
children.add(node);
}
}
// 递归创建子树
for (TreeNode child : children) {
TreeNode childNode = createTree(nodes, level + 1);
child.getChildren().add(childNode);
}
root.setChildren(children);
return root;
}
/**
* 根据树的等级查找它所有上一级的节点 name,一直到根级
*
* @param node 要查找的节点
* @param names 用于存放节点名称的 list
*/
public static void findNodeNames(TreeNode node, List<String> names) {
if (node == null) {
return;
}
names.add(0, node.getName()); // 把节点名加入到 list 的最前面
if (node.getLevel() == 0) {
// 如果到了根节点,直接返回
return;
}
// 递归查找上一级节点
for (TreeNode parent : node.getParents()) {
findNodeNames(parent, names);
}
}
}