Leetcode 654 力扣
解法:递归
public TreeNode constructMaximumBinaryTree(int[] nums) { return dfs(nums,0,nums.length); } private TreeNode dfs(int[] nums, int leftIndex, int rightIndex) { if (rightIndex - leftIndex < 1) {// 没有元素了 return null; } if (rightIndex - leftIndex == 1) {// 只有一个元素 return new TreeNode(nums[leftIndex]); } int maxIndex = leftIndex;// 最大值所在位置 int maxVal = nums[maxIndex];// 最大值 for (int i = leftIndex + 1; i < rightIndex; i++) { if (nums[i] > maxVal){ maxVal = nums[i]; maxIndex = i; } } TreeNode root = new TreeNode(maxVal); // 根据maxIndex划分左右子树 root.left = dfs(nums, leftIndex, maxIndex); root.right = dfs(nums, maxIndex + 1, rightIndex); return root; }
Leetcode 617 https://leetcode.cn/problems/merge-two-binary-trees/