用java写一段通过多个类的list来生成一棵树,其中类的某个属性为pid,指的是父节点的id

时间: 2024-02-27 22:54:55 浏览: 90
PDF

vue elementUI tree树形控件获取父节点ID的实例

好的,下面是一段通过多个类的List来生成一棵树,其中类的某个属性为pid,指的是父节点的id的Java代码: ```java import java.util.*; public class TreeBuilder { public static class TreeNode { public int id; public List<TreeNode> children; public TreeNode(int id) { this.id = id; this.children = new ArrayList<>(); } } public static <T extends TreeNodeInterface> TreeNode buildTree(List<T> nodes) { Map<Integer, TreeNode> map = new HashMap<>(); // 创建所有节点 for (T node : nodes) { TreeNode treeNode = new TreeNode(node.getId()); map.put(node.getId(), treeNode); } // 添加所有子节点 for (T node : nodes) { TreeNode parent = map.get(node.getPid()); if (parent != null) { TreeNode child = map.get(node.getId()); parent.children.add(child); } } // 返回根节点 for (TreeNode node : map.values()) { if (node.id != 0 && node.children.size() == 0) { TreeNode parent = map.get(0); parent.children.add(node); } } return map.get(0); } public static void main(String[] args) { List<Category> categories = new ArrayList<>(); categories.add(new Category(1, 0, "电脑")); categories.add(new Category(2, 1, "笔记本")); categories.add(new Category(3, 1, "台式机")); categories.add(new Category(4, 2, "联想")); categories.add(new Category(5, 2, "戴尔")); categories.add(new Category(6, 3, "惠普")); categories.add(new Category(7, 0, "手机")); categories.add(new Category(8, 7, "苹果")); categories.add(new Category(9, 7, "华为")); TreeNode root = buildTree(categories); System.out.println(root.id); } } interface TreeNodeInterface { int getId(); int getPid(); } class Category implements TreeNodeInterface { private int id; private int pid; private String name; public Category(int id, int pid, String name) { this.id = id; this.pid = pid; this.name = name; } public int getId() { return id; } public int getPid() { return pid; } public String getName() { return name; } } ``` 这段代码中,我们定义了一个 `TreeNode` 类来表示树的节点,其中 `id` 保存节点的id,`children` 保存所有子节点。`TreeNodeInterface` 是一个接口,代表了树节点的属性,包括id和pid。 `buildTree` 方法接受一个参数,即所有节点的列表 `nodes`,其中每个节点都实现了 `TreeNodeInterface` 接口。我们先创建所有节点,然后再为每个节点添加子节点。最后返回根节点即可。在 `main` 方法中,我们演示了如何使用这个方法来创建一棵树,根节点的id为 0。 这段代码的时间复杂度为 $O(n)$,其中 $n$ 是节点的数量。
阅读全文

相关推荐