654. 最大二叉树

img

使用递归的方式很简单。

思想:考虑每个节点需要做的事情

  • 构建一个最大值元素的 TreeNode
  • 根据最大元素将 nums 化为两部分,一部分对应left ,一部分对应 right
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
public TreeNode constructMaximumBinaryTree(int[] nums) {
        return construct(nums, 0, nums.length - 1);
    }

    private TreeNode construct(int[] nums, int start, int end) {
        if (start > end)
            return null;
        int index = -1;
        int maxVal = Integer.MIN_VALUE;
        for (int i = start; i <= end; i++) {
            if (maxVal < nums[i]) {
                index = i;
                maxVal = nums[i];
            }
        }
        TreeNode root = new TreeNode(maxVal);
        root.left = construct(nums, start, index-1);
        root.right = construct(nums, index+1, end);
        return root;
    }