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

        嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享leetcode精选题目的各种题解和Python, JS, JQ, CSS, PHP, JAVA的一些小Demo。请大家关注我,一起交流学习吧。


题目描述

在这里插入图片描述


递归解法

做题思路

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

(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题目整理出来,由浅入深,由简到繁都整理出来是一个宏大的工程,所以我打算每天整理一到两个经典题目,完成这一个流程我相信肯定会收获巨大的。如果想一起刷题的哥们,我们可以一起在群里打卡,共同进步。

在这里插入图片描述
在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/tan45du_yuan/article/details/109014898