2020-12-03 递归的两种结构

33 阅读1分钟

递归,一般用于菜单,区域等,有时候需要递归为树形结构,有时候需要递归为列表

@Test
    void tree() {
        List<Tree> trees = initList();
        Tree root = new Tree("0", "root");
        List<Tree> tree = getTrees("0",trees);
        root.setList(tree);

        System.out.println(JSONUtil.toJsonStr(root));
    }



    @Test
    void treelist() {
        List<Tree> trees = initList();
        Tree root = new Tree("0", "root");

        List<Tree> list = getList("0",trees);
        list.add(root);
        System.out.println(JSONUtil.toJsonStr(list));
    }

    // 递归为树
    private List<Tree> getTrees(String id, List<Tree> trees) {
        List<Tree> list = new ArrayList<>();

        for (Tree tree : trees) {
            if (tree.getPid().equals(id)) {
                list.add(tree);
                tree.setList(getTrees(tree.getId(),trees));
            }
        }
        return list;
    }

    // 递归为列表
    private List<Tree> getList(String id, List<Tree> trees) {
        List<Tree> list = new ArrayList<>();
        for (Tree tree : trees) {
            if (tree.getPid().equals(id)) {
                list.add(tree);
                list.addAll(getList(tree.getId(),trees));
            }
        }
        return list;
    }



    private List<Tree> initList() {
        List<Tree> trees = new ArrayList<>();
        trees.add(new Tree("0", "root"));
        trees.add(new Tree("1", "0"));
        trees.add(new Tree("2", "0"));
        trees.add(new Tree("6", "2"));
        trees.add(new Tree("7", "6"));
        trees.add(new Tree("3", "1"));
        trees.add(new Tree("4", "1"));
        trees.add(new Tree("5", "4"));
        return trees;
    }

以下为实体类代码

public class Tree {
    String id;
    String pid;

    List<Tree> list;

    public Tree(String id, String pid) {
        this.id = id;
        this.pid = pid;
    }

    public Tree() {
    }

    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 List<Tree> getList() {
        return list;
    }

    public void setList(List<Tree> list) {
        this.list = list;
    }
}

本文转自 jimolvxing.blog.csdn.net/article/det…,如有侵权,请联系删除。