java怎么將list轉(zhuǎn)為樹(shù)結(jié)構(gòu)

小億
180
2024-02-29 13:52:18

在Java中,我們可以通過(guò)構(gòu)建樹(shù)節(jié)點(diǎn)對(duì)象來(lái)將一個(gè)List轉(zhuǎn)換為樹(shù)結(jié)構(gòu)。下面是一個(gè)示例代碼:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class TreeNode {
    int val;
    List<TreeNode> children;

    public TreeNode(int val) {
        this.val = val;
        this.children = new ArrayList<>();
    }
}

public class ListToTree {

    public static TreeNode listToTree(List<Integer> list) {
        Map<Integer, TreeNode> map = new HashMap<>();
        TreeNode root = null;

        for (Integer val : list) {
            TreeNode node = new TreeNode(val);
            map.put(val, node);
        }

        for (Integer val : list) {
            TreeNode node = map.get(val);
            if (val == 0) {
                root = node;
            } else {
                TreeNode parent = map.get((val - 1) / 2);
                parent.children.add(node);
            }
        }

        return root;
    }

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(0);
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        TreeNode root = listToTree(list);
    }
}

在這段代碼中,我們首先創(chuàng)建一個(gè)TreeNode類來(lái)表示樹(shù)節(jié)點(diǎn)對(duì)象,其中包含節(jié)點(diǎn)值和子節(jié)點(diǎn)列表。接著,我們通過(guò)遍歷給定的List來(lái)創(chuàng)建樹(shù)節(jié)點(diǎn)對(duì)象,并將它們存儲(chǔ)在一個(gè)Map中,其中鍵為節(jié)點(diǎn)值,值為節(jié)點(diǎn)對(duì)象。然后,我們?cè)俅伪闅vList,根據(jù)節(jié)點(diǎn)值的關(guān)系構(gòu)建樹(shù)結(jié)構(gòu),并返回根節(jié)點(diǎn)。最后,我們可以通過(guò)調(diào)用listToTree方法將一個(gè)List轉(zhuǎn)換為樹(shù)結(jié)構(gòu),并獲取根節(jié)點(diǎn)。

0