654. 最大二叉树

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。

示例 :

输入:[3,2,1,6,0,5]
输出:返回下面这棵树的根节点:

6
/ \
3 5
\ /
2 0
\
1
 

提示:

给定的数组的大小在 [1, 1000] 之间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 class Solution {
11     public TreeNode constructMaximumBinaryTree(int[] nums) {
12         return maxTree(nums,0,nums.length-1);
13     }
14     public int findMax(int[] nums,int l,int r)
15     {//找到当前数组最大值相对于nums的索引
16         int max=0, maxIndex = l;
17         for (int i=l;i<=r;i++)
18         {
19             if (max <nums[i])
20             {
21                 max=nums[i];
22                 maxIndex=i;
23             }
24         }
25         return maxIndex;
26     }
27     public TreeNode maxTree(int[] nums,int l,int r)
28     {//递归构造左右两边的最大二叉树
29         if (l>r)
30         {
31             return null;
32         }
33         int maxIndex = findMax(nums,l,r);
34         TreeNode root = new TreeNode(nums[maxIndex]);
35         root.left = maxTree(nums,l,maxIndex-1);
36         root.right = maxTree(nums,maxIndex+1,r);
37         return root;
38     }
39 }

猜你喜欢

转载自www.cnblogs.com/zccfrancis/p/12189219.html