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;
​
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值