Java怎么实现树形List与扁平List互转

   2025-02-04 2770
核心提示:一种实现树形List与扁平List互转的方法是使用递归遍历树形结构。首先,定义一个树节点的类,包含节点的值和子节点列表:class Tr

一种实现树形List与扁平List互转的方法是使用递归遍历树形结构。

首先,定义一个树节点的类,包含节点的值和子节点列表:

class TreeNode {    private int value;    private List<TreeNode> children;    // 构造函数    public TreeNode(int value) {        this.value = value;        this.children = new ArrayList<>();    }    // getter和setter方法    public int getValue() {        return value;    }    public void setValue(int value) {        this.value = value;    }    public List<TreeNode> getChildren() {        return children;    }    public void setChildren(List<TreeNode> children) {        this.children = children;    }    // 添加子节点的方法    public void addChild(TreeNode child) {        this.children.add(child);    }}

接下来,实现树形List转换为扁平List的方法:

public class TreeListConverter {    // 树形List转扁平List    public static List<TreeNode> flattenList(List<TreeNode> treeList) {        List<TreeNode> flatList = new ArrayList<>();        for (TreeNode node : treeList) {            flatList.add(node);            flatList.addAll(flattenList(node.getChildren()));        }        return flatList;    }}

然后,实现扁平List转换为树形List的方法:

public class TreeListConverter {    // 扁平List转树形List    public static List<TreeNode> buildTreeList(List<TreeNode> flatList) {        Map<Integer, TreeNode> nodeMap = new HashMap<>();        List<TreeNode> treeList = new ArrayList<>();        for (TreeNode node : flatList) {            nodeMap.put(node.getValue(), node);            if (node.getParentId() == null) {                treeList.add(node);            } else {                TreeNode parent = nodeMap.get(node.getParentId());                parent.addChild(node);            }        }        return treeList;    }}

注意,为了实现扁平List转换为树形List,需要在树节点类中添加一个父节点的引用。

使用示例:

public class Main {    public static void main(String[] args) {        List<TreeNode> treeList = new ArrayList<>();        TreeNode node1 = new TreeNode(1);        TreeNode node2 = new TreeNode(2);        TreeNode node3 = new TreeNode(3);        TreeNode node4 = new TreeNode(4);        TreeNode node5 = new TreeNode(5);        TreeNode node6 = new TreeNode(6);        node1.addChild(node2);        node1.addChild(node3);        node2.addChild(node4);        node2.addChild(node5);        node3.addChild(node6);        treeList.add(node1);        List<TreeNode> flatList = TreeListConverter.flattenList(treeList);        System.out.println(flatList);        List<TreeNode> treeList2 = TreeListConverter.buildTreeList(flatList);        System.out.println(treeList2);    }}

输出结果:

[1, 2, 4, 5, 3, 6][1]

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言