java实现tree树形结构

树节点遍历工具类:
 1 @UtilityClass
 2 public class TreeUtil {
 3     /**
 4      * 两层循环实现建树
 5      *
 6      * @param treeNodes 传入的树节点列表
 7      * @return
 8      */
 9     public <T extends TreeNode> List<T> bulid(List<T> treeNodes, Object root) {
10 
11         List<T> trees = new ArrayList<>();
12 
13         for (T treeNode : treeNodes) {
14 
15             if (root.equals(treeNode.getParentId())) {
16                 trees.add(treeNode);
17             }
18 
19             for (T it : treeNodes) {
20                 if (it.getParentId() == treeNode.getId()) {
21                     if (treeNode.getChildren() == null) {
22                         treeNode.setChildren(new ArrayList<>());
23                     }
24                     treeNode.add(it);
25                 }
26             }
27         }
28         return trees;
29     }
30 
31     /**
32      * 使用递归方法建树
33      *
34      * @param treeNodes
35      * @return
36      */
37     public <T extends TreeNode> List<T> buildByRecursive(List<T> treeNodes, Object root) {
38         List<T> trees = new ArrayList<T>();
39         for (T treeNode : treeNodes) {
40             if (root.equals(treeNode.getParentId())) {
41                 trees.add(findChildren(treeNode, treeNodes));
42             }
43         }
44         return trees;
45     }
46 
47     /**
48      * 递归查找子节点
49      *
50      * @param treeNodes
51      * @return
52      */
53     public <T extends TreeNode> T findChildren(T treeNode, List<T> treeNodes) {
54         for (T it : treeNodes) {
55             if (treeNode.getId() == it.getParentId()) {
56                 if (treeNode.getChildren() == null) {
57                     treeNode.setChildren(new ArrayList<>());
58                 }
59                 treeNode.add(findChildren(it, treeNodes));
60             }
61         }
62         return treeNode;
63     }
64 }
TreeUtil

   树模型:

 1 @Data
 2 public class TreeNode {
 3     protected int id;
 4     protected int parentId;
 5     protected String name;
 6     protected List<TreeNode> children = new ArrayList<TreeNode>();
 7 
 8     public void add(TreeNode node) {
 9         children.add(node);
10     }
11 }
TreeNode

 部门树:

 

1 @Data
2 @EqualsAndHashCode(callSuper = true)
3 public class DeptTree extends TreeNode {
4     private String name;
5 }
DeptTree

   构建部门树方法:

 1 public List<DeptTree> getDeptTree(List<SysDept> depts) {
 2         List<DeptTree> treeList = depts.stream()
 3                 .filter(dept -> !dept.getDeptId().equals(dept.getParentId()))
 4                 .map(dept -> {
 5                     DeptTree node = new DeptTree();
 6                     node.setId(dept.getDeptId());
 7                     node.setParentId(dept.getParentId());
 8                     node.setName(dept.getName());
 9                     return node;
10                 }).collect(Collectors.toList());
11         return TreeUtil.bulid(treeList, 0);
12     }
getDeptTree

 

 

转载于:https://www.cnblogs.com/youyouxiaosheng-lh/p/11052045.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
树形结构计算可以使用 Java 中的树形数据结构来实现,例如二叉树、B树等。以下是一个简单的二叉树的实现,可用于树形结构计算: ```java class Node { int value; Node left; Node right; Node(int value) { this.value = value; left = null; right = null; } } class BinaryTree { Node root; BinaryTree() { root = null; } void insert(int value) { root = insertRecursive(root, value); } Node insertRecursive(Node current, int value) { if (current == null) { return new Node(value); } if (value < current.value) { current.left = insertRecursive(current.left, value); } else if (value > current.value) { current.right = insertRecursive(current.right, value); } else { // value already exists return current; } return current; } int sum() { return sumRecursive(root); } int sumRecursive(Node node) { if (node == null) { return 0; } return node.value + sumRecursive(node.left) + sumRecursive(node.right); } } public class Main { public static void main(String[] args) { BinaryTree tree = new BinaryTree(); // insert nodes to the binary tree tree.insert(5); tree.insert(3); tree.insert(7); tree.insert(1); tree.insert(9); // calculate the sum of all nodes int sum = tree.sum(); System.out.println("Sum of all nodes: " + sum); } } ``` 上述代码中,我们首先定义了一个节点 Node 类,包含节点的值和左右子节点。然后定义了一个 BinaryTree 类,包含根节点和插入、计算节点和的方法。在 Main 类中,我们创建了一个 BinaryTree 对象,插入了一些节点,并计算了所有节点的和。 当然,这只是一个简单的例子,你可以根据具体的需求来实现更复杂的树形结构计算。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值