题目来源于知识星球—英雄算法联盟,六月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、654.最大二叉树(中等)
1.题目描述
2.解题思路
先找到数组中的最大值,其左边的数构成左子树,其右边的数构成右子树,
然后根据题意递归求解即可。
3.代码演示(C++)
class Solution
{
TreeNode *dfs(vector<int>& nums, int l, int r)
{
if(l > r)
{
return NULL;
}
int maxIdx = l;
for(int i = l+1; i <= r; ++i)
{
if(nums[i] > nums[maxIdx])
{
maxIdx = i;
}
}
TreeNode *root = new TreeNode(nums[maxIdx]);
root->left = dfs(nums, l, maxIdx-1);
root->right = dfs(nums, maxIdx+1, r);
return root;
}
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums)
{
TreeNode *root = dfs(nums, 0, nums.size()-1);
return root;
}
};
4.题目链接
二、889.根据前序和后序遍历构造二叉树(中等)
1.题目描述
2.解题思路
原理确实懂,但是代码实现就很费劲
3.代码演示(C++)
4.题目链接
三、1569.将子数组重新排序得到同一个二叉查找树的方案数(困难)
1.题目描述
2.解题思路
困难题
3.代码演示(C++)
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!