• 654. 最大二叉树


    654. 最大二叉树icon-default.png?t=M7J4https://leetcode.cn/problems/maximum-binary-tree/

    难度中等565

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

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

    返回 nums 构建的 最大二叉树 

    示例 1:

    输入:nums = [3,2,1,6,0,5]
    输出:[6,3,5,null,2,0,null,null,1]
    解释:递归调用如下所示:
    - [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。
        - [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。
            - 空数组,无子节点。
            - [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1] 。
                - 空数组,无子节点。
                - 只有一个元素,所以子节点是一个值为 1 的节点。
        - [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 [] 。
            - 只有一个元素,所以子节点是一个值为 0 的节点。
            - 空数组,无子节点。
    

    示例 2:

    输入:nums = [3,2,1]
    输出:[3,null,2,null,1]
    

    提示:

    • 1 <= nums.length <= 1000
    • 0 <= nums[i] <= 1000
    • nums 中的所有整数 互不相同

    通过次数152,182提交次数183,329

    1. /**
    2. * Definition for a binary tree node.
    3. * public class TreeNode {
    4. * int val;
    5. * TreeNode left;
    6. * TreeNode right;
    7. * TreeNode() {}
    8. * TreeNode(int val) { this.val = val; }
    9. * TreeNode(int val, TreeNode left, TreeNode right) {
    10. * this.val = val;
    11. * this.left = left;
    12. * this.right = right;
    13. * }
    14. * }
    15. */
    16. class Solution {
    17. public TreeNode constructMaximumBinaryTree(int[] nums) {
    18. int start = 0;
    19. int end = nums.length-1;
    20. return ceate(nums,start,end);
    21. }
    22. TreeNode ceate(int[] nums,int start,int end)
    23. {
    24. if(!(start>=0 && end<nums.length && start<=end)) return null;
    25. TreeNode node = new TreeNode();
    26. //找到最大值
    27. int max=start;
    28. for(int i=start;i<=end;i++)
    29. {
    30. if(nums[i]>nums[max]) max = i;
    31. }
    32. node.val = nums[max];
    33. node.left = ceate(nums,start,max-1);
    34. node.right = ceate(nums,max+1,end);
    35. return node;
    36. }
    37. }

     

  • 相关阅读:
    Java基础进阶Map-HashMap集合
    find、findindex、indexof的区别
    `maven.test.skip` 和 `skipTests` 的区别
    Java本地远程断点调试(实战记录)
    正确利用JS赋值表达式返回值
    轻量级超分网络:Edge-oriented Convolution Block for Real-timeMM21_ECBSR 和 eSR
    springboot集成UidGenerator
    Java开发面试常见问题总结
    前端的强缓存和协商缓存
    Unity Shader - 兰伯特漫反射
  • 原文地址:https://blog.csdn.net/Getugly/article/details/126715697