1. 程式人生 > 實用技巧 >LeetCode——最大二叉樹

LeetCode——最大二叉樹

給定一個不含重複元素的整數陣列。一個以此陣列構建的最大二叉樹定義如下:

  • 二叉樹的根是陣列中的最大元素。
  • 左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。
  • 右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。

通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。

A:樹的遞迴

    public TreeNode constructMaximumBinaryTree(int[] nums) {
        if (nums.length == 0)
            return null;
        int max = nums[0];
        int maxIndex = 0;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] > max) {
                max = nums[i];
                maxIndex = i;
            }
        }
        TreeNode node = new TreeNode(max);
        int[] left = Arrays.copyOfRange(nums, 0, maxIndex);
        node.left = constructMaximumBinaryTree(left);
        int[] right = Arrays.copyOfRange(nums, maxIndex + 1, nums.length);
        node.right = constructMaximumBinaryTree(right);
        return node;
    }