91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

Java怎么生成樹形結構數據

小億
97
2023-11-18 16:24:52
欄目: 編程語言

Java中生成樹形結構數據可以使用多種方法,下面列舉了兩種常用的方法:

方法一:使用遞歸實現

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

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

public class TreeGenerator {
    public static TreeNode generateTree(int[] nums, int rootIndex) {
        if (rootIndex >= nums.length) {
            return null;
        }
        
        TreeNode root = new TreeNode(nums[rootIndex]);
        
        int leftChildIndex = 2 * rootIndex + 1;
        int rightChildIndex = 2 * rootIndex + 2;
        
        root.children.add(generateTree(nums, leftChildIndex));
        root.children.add(generateTree(nums, rightChildIndex));
        
        return root;
    }
    
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5, 6, 7};
        
        TreeNode root = generateTree(nums, 0);
        
        // 打印樹的結構
        printTree(root, 0);
    }
    
    public static void printTree(TreeNode root, int level) {
        if (root == null) {
            return;
        }
        
        for (int i = 0; i < level; i++) {
            System.out.print("\t");
        }
        
        System.out.println(root.val);
        
        for (TreeNode child : root.children) {
            printTree(child, level + 1);
        }
    }
}

方法二:使用隊列實現

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

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

public class TreeGenerator {
    public static TreeNode generateTree(int[] nums) {
        if (nums.length == 0) {
            return null;
        }
        
        TreeNode root = new TreeNode(nums[0]);
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        
        int index = 1;
        while (!queue.isEmpty() && index < nums.length) {
            TreeNode currNode = queue.poll();
            
            // 左孩子
            if (index < nums.length) {
                TreeNode leftChild = new TreeNode(nums[index++]);
                currNode.children.add(leftChild);
                queue.offer(leftChild);
            }
            
            // 右孩子
            if (index < nums.length) {
                TreeNode rightChild = new TreeNode(nums[index++]);
                currNode.children.add(rightChild);
                queue.offer(rightChild);
            }
        }
        
        return root;
    }
    
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5, 6, 7};
        
        TreeNode root = generateTree(nums);
        
        // 打印樹的結構
        printTree(root, 0);
    }
    
    public static void printTree(TreeNode root, int level) {
        if (root == null) {
            return;
        }
        
        for (int i = 0; i < level; i++) {
            System.out.print("\t");
        }
        
        System.out.println(root.val);
        
        for (TreeNode child : root.children) {
            printTree(child, level + 1);
        }
    }
}

以上兩種方法都可以根據給定的數組生成樹形結構數據,并且可以通過遞歸或者隊列的方式進行遍歷和打印。

0
中宁县| 宁海县| 和林格尔县| 综艺| 富源县| 双柏县| 休宁县| 临城县| 道孚县| 安阳市| 安达市| 垫江县| 石狮市| 汨罗市| 石林| 南靖县| 六盘水市| 南皮县| 仙居县| 肥城市| 汝城县| 炎陵县| 平顶山市| 随州市| 文登市| 彰武县| 梨树县| 大田县| 兰坪| 屯昌县| 谢通门县| 临澧县| 哈尔滨市| 习水县| 寻乌县| 天津市| 迭部县| 孝感市| 祁连县| 木兰县| 鹿邑县|