java对于树的构建

该博客介绍了一个Java实现的`TreeBuilder`类,用于将包含`Node`对象的列表转换为树结构。通过查找根节点,递归寻找子节点,并设置节点层级,将集合数据转化为树形结构。示例代码展示了如何创建并打印树结构。
摘要由CSDN通过智能技术生成
package tree; 

import java.util.ArrayList; 
import java.util.List; 

import org.apache.commons.collections.CollectionUtils; 


public class TreeBuilder { 

    /** 
     * 将集合建立成树结构 
     * 
     * @param dirs 
     * @return 
     */ 
    @SuppressWarnings("unchecked") 
    private List<Node> buildListToTree(List<Node> dirs) { 
        List<Node> roots = findRoots(dirs); 
        List<Node> notRoots = (List<Node>) CollectionUtils.subtract(dirs, roots); 
        for (Node root : roots) { 
            root.setChildren(findChildren(root, notRoots)); 
        } 
        return roots; 
    } 

    /** 
     * 找出集合中的根元素 
     * 
     * @param allDirs 
     * @return 
     */ 
    public List<Node> findRoots(List<Node> allNodes) { 
        List<Node> results = new ArrayList<Node>(); 
        for (Node node : allNodes) { 
            boolean isRoot = true; 
     
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java多叉可以用于构建家谱,以下是一个简单的实现示例: ```java class Person { private String name; private List<Person> children; public Person(String name) { this.name = name; this.children = new ArrayList<>(); } public String getName() { return name; } public void addChild(Person child) { this.children.add(child); } public List<Person> getChildren() { return children; } } public class FamilyTree { private Person root; public FamilyTree(String name) { this.root = new Person(name); } public Person getRoot() { return root; } public void addPerson(Person parent, Person child) { parent.addChild(child); } public static void main(String[] args) { FamilyTree familyTree = new FamilyTree("张三"); Person parent1 = familyTree.getRoot(); Person child1 = new Person("李四"); familyTree.addPerson(parent1, child1); Person parent2 = child1; Person child2 = new Person("王五"); familyTree.addPerson(parent2, child2); System.out.println(familyTree.getRoot().getName()); for (Person child : familyTree.getRoot().getChildren()) { System.out.println(" " + child.getName()); for (Person grandChild : child.getChildren()) { System.out.println(" " + grandChild.getName()); } } } } ``` 在上面的示例中,`Person`类代表一个人,每个人有一个名字和多个子节点,即其子女。`FamilyTree`类代表家谱,其中`root`字段为根节点,表示家谱的起始人物。`addPerson`方法用于向家谱中添加人物。在`main`方法中,先创建家谱的起始人物张三,然后添加李四作为其子女,再添加王五作为李四的子女。最后,通过遍历的方式输出家谱的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值