【leetcode】每日精选题详解之654. 最大二叉树

        嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享leetcode精选题目的各种题解,并且每周会整理一下该周刷的所有题目,及解题框架。大家搜索【程序员爱做饭】关注我吧!


654. 最大二叉树

  • 题目描述
  • 递归解法
    • 做题思路
    • 题目代码
  • 总结

题目描述

【leetcode】每日精选题详解之654. 最大二叉树_第1张图片


递归解法

做题思路

这个题目不算太难,主要是不断求出最大值做为根节点。我们可以通过一下几步进行构造二叉树

(1)如果数组大小为零,说明是空数组
(2)如果不为空,则取数组中最大的数为根节点,并记录下该节点的索引。
(3)以该节点为切割点进行切割,分成左数组和右数组
(4)递归处理左数组和右数组

题目代码

class Solution {
     
    public TreeNode constructMaximumBinaryTree(int[] nums) {
     
              if(nums.length==0){
     
                  return null;
              }
              return constructMaximumBinaryTreeFun(nums);

    }
    public TreeNode constructMaximumBinaryTreeFun(int[] nums){
     
              if(nums.length==0){
     
                  return null;
              }
              int max = 0;
              int maxindex = 0; 
              //求出最大值,并记录出最大值下标
              for(int i = 0; i< nums.length;i++){
     
                  if(nums[i]>max){
     
                      max = nums[i];
                      maxindex = i;
                  }
              }
              //将最大值设为根节点
              TreeNode root = new TreeNode(max);
              //定义左区间和右区间,大小需要注意一下。
              int[] left = new int[maxindex];
              int[] right = new int[nums.length-maxindex-1];
              //copy原数组的值,为递归做准备
              System.arraycopy(nums,0,left,0,maxindex);
              System.arraycopy(nums,maxindex+1,right,0,nums.length-maxindex-1);
              //递归实现
              root.left=constructMaximumBinaryTreeFun(left);
              root.right=constructMaximumBinaryTreeFun(right);
              return root;
    }
}

总结

【leetcode】每日精选题详解之654. 最大二叉树_第2张图片

作者:LeetCode
链接:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(leetcode每日精选,二叉树,leetcode,算法)