LeetCode 654. 最大二叉树(递归建树)
程序员文章站
2022-05-20 20:24:54
...
最大二叉树看到有人用java写的,只跑了2ms,我还以为做了什么优化,原来和我的写法一模一样,那为什么c++居然比java慢好多啊。。。
具体思路和重建二叉树是一致的,保存了数组的左右边界下标,从l、r找出最大值,然后递归的向下建树即可。注意递归边界是左边界大于右边界。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return create(0,nums.size()-1,nums);
}
TreeNode* create(int l,int r,vector<int>& nums){
if(l>r){
return nullptr;
}
int mmax = nums[l],idx=l;
for(int i=l+1;i<=r;i++){
if(nums[i]>mmax){
mmax = nums[i];
idx = i;
}
}
TreeNode* root = new TreeNode(mmax);
root->left = create(l,idx-1,nums);
root->right = create(idx+1,r,nums);
return root;
}
};
推荐阅读
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
【LeetCode-Hot100】104. 二叉树的最大深度
-
leetcode 101. 对称二叉树 递归解法
-
【LeetCode】二叉树各种遍历大汇总(秒杀前序、中序、后序、层序)递归 & 迭代
-
【leetcode 简单】第二十三题 二叉树的最大深度
-
LeetCode - 二叉树的最大深度
-
C++实现LeetCode(124.求二叉树的最大路径和)
-
C++实现LeetCode(104.二叉树的最大深度)
-
LeetCode刷题(117)~二叉树的中序遍历【递归|迭代】