嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享leetcode精选题目的各种题解和Python, JS, JQ, CSS, PHP, JAVA的一些小Demo。请大家关注我,一起交流学习吧。
654. 最大二叉树
- 题目描述
- 递归解法
- 做题思路
- 题目代码
- 总结
题目描述
递归解法
做题思路
这个题目不算太难,主要是不断求出最大值做为根节点。我们可以通过一下几步进行构造二叉树 (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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。