leetcode654:最大二叉树

leetcode654:最大二叉树

  • 题目:给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:

    创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums 构建的 最大二叉树

  • 思路:构造一个built函数,返回数组中值最大的为最大二叉树的根节点,继续遍历以根节点为边界的左右两个数组,遍历循环返回的根节点分别为上一个父根节点的左右子树节点。

class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        return build(nums,0,nums.length-1);
​
​
    }
​
    TreeNode build(int[] nums,int lo,int high){
        if(lo>high){
            return null;
        }
        int index = -1; 
        int maxValue = Integer.MIN_VALUE;
        for(int i = lo;i<=high;i++){
            if(nums[i]>maxValue){
                index=i;
                maxValue = nums[i];
            }
        }
        TreeNode root = new TreeNode(maxValue);
​
        root.left = build(nums,lo,index-1);
        root.right = build(nums,index+1,high);
        return root;
​
    }
}

你可能感兴趣的:(leetcode算法题解答,算法,leetcode,java)