Java实现 LeetCode 654 最大二叉树(递归)

654. 最大二叉树

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

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

示例 :

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

      6
    /   \
   3     5
    \    / 
     2  0   
       \
        1

提示:

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

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
     //寻找l到r区域中的最大值索引
	public int max(int[] nums,int l,int r){
		int max_i = l;
		for(int i=l;i<r;i++){
			if(nums[max_i] < nums[i]){
				max_i = i;
			}
		}
		return max_i;
	}
    public TreeNode construct(int nums[] ,int l,int r){
		if(l == r) return null;
		int max_i = max(nums,l,r);
		TreeNode root = new TreeNode(nums[max_i]);
		root.left = construct(nums, l, max_i);
		root.right = construct(nums, max_i+1, r);
		return root;
	}
    public TreeNode constructMaximumBinaryTree(int[] nums) {
		return construct(nums, 0, nums.length);
	}
}
发布了1708 篇原创文章 · 获赞 3万+ · 访问量 341万+

猜你喜欢

转载自blog.csdn.net/a1439775520/article/details/105275542