欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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; 
    }
};