java树生成

TreeNode基类

/**
 * 树节点
 */
public abstract class TreeNode {   
    private String id;
    private String parentId;
    private String name;
    private List children;

    /**
     * 是否为根节点
     * 根据当前节点的parentId判断该节点是否为根节点
     *
     * @param parentId
     * @return
     */
    public abstract boolean isRoot(String parentId);

    /**
     * 子节点排序
     *
     * @param children
     */
    public abstract void sortChildren(List children);


    public void addChildNode(TreeNode treeNode) {
        initChildList();
        children.add(treeNode);
    }

    public void initChildList() {
        if (children == null)
            children = new ArrayList<>();
    }

    // getter setter
}

TreeHelper

/**
 * 树生成helper
 */
public class TreeHelper {


    public static <T extends TreeNode> void generateTree(Map<String, T> nodeMap) {
        // 建立父子关系
        for (TreeNode node : nodeMap.values()) {
            String parentId = node.getParentId();

            if (node.isRoot(parentId)) {
                continue;
            }
            if (nodeMap.containsKey(parentId)) {
                TreeNode parentNode = nodeMap.get(parentId);
                if (parentNode == null) {
                    throw new InternalException("生成树失败");
                } else {
                    parentNode.addChildNode(node);
                }
            }
        }

        // sort
        for (T t : nodeMap.values()) {
            List children = t.getChildren();
            if (children != null && children.size() > 0) {
                t.sortChildren(children);
            }
        }

    }


}

/**
 * 具体树节点
 */
public class CostCenterNode extends TreeNode implements Comparable<CostCenterNode>{
    private String code;
    private int position;
    private int employeeCount;

    @Override
    public boolean isRoot(String parentId) {
        if (StringUtil.isEmpty(parentId)) {
            return true;
        }
        return false;
    }

    @Override
    public void sortChildren(List children) {
        Collections.sort(children);
    }

    public CostCenterNode(CostCenterDO centerDO) {
        this.setId(centerDO.getCostId());
        this.setParentId(centerDO.getParentId());
        this.setName(centerDO.getName());
        this.setCode(centerDO.getCode());
        this.setPosition(centerDO.getPosition());
        this.setChildren(new ArrayList());
    }

    // getter setter

    @Override
    public int compareTo(CostCenterNode o) {
        // 按照position升序排列
        if (this.position > o.getPosition()) {
            return 1;
        } else {
            return -1;
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java生成通用可以使用递归的方式实现,下面是一个简单的实现示例: ```java public class TreeNode<T> { private T data; private List<TreeNode<T>> children; public TreeNode(T data) { this.data = data; this.children = new ArrayList<>(); } public void addChild(TreeNode<T> child) { this.children.add(child); } // getter and setter methods omitted for brevity } public class Tree<T> { private TreeNode<T> root; public Tree(T data) { this.root = new TreeNode<>(data); } public TreeNode<T> getRoot() { return root; } public void setRoot(TreeNode<T> root) { this.root = root; } // 添加子节点 public void addChild(TreeNode<T> parent, TreeNode<T> child) { parent.addChild(child); } // 遍历 public void traverse(TreeNode<T> node) { System.out.println(node.getData()); for (TreeNode<T> child : node.getChildren()) { traverse(child); } } } // 使用示例 public static void main(String[] args) { Tree<String> tree = new Tree<>("A"); TreeNode<String> b = new TreeNode<>("B"); TreeNode<String> c = new TreeNode<>("C"); TreeNode<String> d = new TreeNode<>("D"); TreeNode<String> e = new TreeNode<>("E"); TreeNode<String> f = new TreeNode<>("F"); TreeNode<String> g = new TreeNode<>("G"); TreeNode<String> h = new TreeNode<>("H"); tree.addChild(tree.getRoot(), b); tree.addChild(tree.getRoot(), c); tree.addChild(b, d); tree.addChild(b, e); tree.addChild(c, f); tree.addChild(c, g); tree.addChild(d, h); tree.traverse(tree.getRoot()); } ``` 上述代码中,`TreeNode`表示的节点,包含了节点数据和子节点列表;`Tree`表示,包含了根节点和添加子节点、遍历的方法。在使用示例中,先创建的根节点A,然后添加子节点B和C,再分别为B和C添加子节点,最后遍历整棵

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值