java构造树状结构(children带[])

1、这里构造Tree.java实体类

package com.tcl.jr.crm.entity;
 
/**
 * 类名称:Tree
 * 类描述:树形结构
 */
public class Tree {
 
  private String id;
  private String pId;
  private String name;
  public String getId() {
    return id;
  }
 
  public void setId(String id) {
    this.id = id;
  }
 
  public String getpId() {
    return pId;
  }
 
  public void setpId(String pId) {
    this.pId = pId;
  }
 
  public String getName() {
    return name;
  }
 
  public void setName(String name) {
    this.name = name;
  }
 
  @Override
  public String toString() {
    return "Tree [id=" + id + ", pId=" + pId + ", name=" + name + "]";
  }
 
}

2、封装树形结构类,这里我封装成一个通用的工具类,方便项目中使用,MenuTreeUtil.java,完整代码如下,可直接复制使用:

package com.tcl.jr.crm.util;
 
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
 
import com.tcl.jr.crm.entity.Tree;
 
/**
 * 类名称:MenuTreeUtil
 * 类描述:递归构造树型结构
 */
public class MenuTreeUtil {
   
  public static Map<String,Object> mapArray = new LinkedHashMap<String, Object>(); 
  public List<Tree> menuCommon; 
  public List<Object> list = new ArrayList<Object>(); 
    
  public List<Object> menuList(List<Tree> menu){   
    this.menuCommon = menu; 
    for (Tree x : menu) {   
      Map<String,Object> mapArr = new LinkedHashMap<String, Object>(); 
      if(x.getpId()=="0"){ 
        mapArr.put("id", x.getId()); 
        mapArr.put("name", x.getName());  
        mapArr.put("pid", x.getpId());  
        mapArr.put("childList", menuChild(x.getId()));  
        list.add(mapArr); 
      } 
    }   
    return list; 
  } 
   
  public List<?> menuChild(String id){ 
    List<Object> lists = new ArrayList<Object>(); 
    for(Tree a:menuCommon){ 
      Map<String,Object> childArray = new LinkedHashMap<String, Object>(); 
      if(a.getpId() == id){ 
        childArray.put("id", a.getId()); 
        childArray.put("name", a.getName()); 
        childArray.put("pid", a.getpId()); 
        childArray.put("childList", menuChild(a.getId()));
        lists.add(childArray); 
      } 
    } 
    return lists; 
  } 
 
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你有两个树形结构,想要将它们合并成一个新的树形结构,可以使用以下步骤: 1. 从根节点开始,将第一个树形结构的根节点和第二个树形结构的根节点进行合并,创建新的根节点。 2. 遍历第一个树形结构和第二个树形结构中的所有节点,并将它们添加到新的树形结构中。 3. 对于每个节点,将其子节点添加到新的树形结构中相应的父节点下。 4. 递归执行步骤3,直到所有节点都被添加到新的树形结构中。 下面是一个Java代码示例: ```java public class TreeNode { int val; List<TreeNode> children; public TreeNode(int val) { this.val = val; children = new ArrayList<>(); } } public class TreeMerger { public TreeNode merge(TreeNode t1, TreeNode t2) { if (t1 == null && t2 == null) { return null; } if (t1 == null) { return t2; } if (t2 == null) { return t1; } TreeNode root = new TreeNode(t1.val + t2.val); for (TreeNode child : t1.children) { root.children.add(merge(child, findChild(t2, child.val))); } for (TreeNode child : t2.children) { if (findChild(t1, child.val) == null) { root.children.add(merge(null, child)); } } return root; } private TreeNode findChild(TreeNode node, int val) { if (node == null) { return null; } if (node.val == val) { return node; } for (TreeNode child : node.children) { TreeNode found = findChild(child, val); if (found != null) { return found; } } return null; } } ``` 这个示例中,我们定义了一个`TreeNode`类表示树形结构的节点,并使用`List`来存储子节点。`TreeMerger`类包含一个`merge`方法,用于将两个树形结构合并成一个新的树形结构。我们使用递归实现这个方法,首先合并根节点,然后将第一个树形结构的所有子节点添加到新的树形结构中,同时查找第二个树形结构中是否有相同值的节点。如果有,则递归合并这两个子节点;如果没有,则将这个子节点添加到新的树形结构中。最后,将第二个树形结构中剩余的节点添加到新的树形结构中即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值