多叉树的构建

有个需求,是一张地区表,地区表中包含多层级的地区,如:中国,河北省,邢台市,桥东区。一共有4个层级。数据库字段设计为

 

 

我要将这些数据转为有层级关系的json数据:很显然数据的结构是个树,于是就要建立树的结构:

1 public class Node{ 
2     public Map<Integer,Node> childs = new HashMap<>(); 
3     public String name; public Integer id; 
4     public Integer parentId; 
5 }

从数据库取到所有数据 attrAreas进行一个树的构建:

 1 public void local(List<ModelAttrArea> attrAreas){ //建立根节点
 2     Node root=new Node(); Map<Integer,Node> maps= new HashMap<>(); //遍历所有节点,将节点放入节点map中 
 3     for(ModelAttrArea temp:attrAreas) { 
 4         Node node = new Node(); 
 5         node.name = temp.getName(); 
 6         node.id = temp.getID(); 
 7         node.parentId = temp.getParentId(); 
 8         maps.put(temp.getID(),node); 
 9     } 
10     
11     //开始遍历已经放好的map,将没有父节点的节点放倒根目录下,把有父节点的节点,找到父节点,然后给父节点添加子节点。 
12     for (Map.Entry<Integer, Node> entry : maps.entrySet()){ 
13         Node e=entry.getValue(); 
14         Integer parentId = e.parentId; 
15         if(parentId==null){ 
16             root.childs.put(e.id, e); 
17         }else{ 
18             Node pnode = maps.get(parentId); 
19             pnode.childs.put(e.id,e); 
20             } 
21         } 
22     }
23 }

参考地址:http://www.imooc.com/article/6909?block_id=tuijian_wz

转载于:https://www.cnblogs.com/lezhifang/p/7128299.html

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、付费专栏及课程。

余额充值