Maximum Binary Tree (Leetcode 654)

第一种方法比较直接,利用recursion,时间复杂度Nlog(N);

class Solution {
public:
    
    TreeNode* build_tree(vector<int>& nums, int left, int right){
        if(left > right){
            return NULL;
        }
        
        int max_num = nums[left], max_idx = left;
        for(int i=left+1; i<=right; i++){
            if(nums[i] > max_num){
                max_num = nums[i];
                max_idx = i;
            }   
        }
        
        TreeNode *root = new TreeNode(max_num);
        root->left = build_tree(nums, left, max_idx-1);
        root->right = build_tree(nums, max_idx+1, right);
        
        return root;
    }
    
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        if(nums.empty()){
            return NULL;
        }
        
        return build_tree(nums, 0, nums.size()-1);
    }
};

第二种是O(N), 利用了单调栈的思想,其中用deque来替代普通的stack

class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        if(nums.empty()){
            return NULL;
        }
        
        deque<TreeNode*> st;
        for(int i=0; i<nums.size(); i++){
            TreeNode *cur = new TreeNode(nums[i]);
            while(!st.empty() && st.back()->val < nums[i]){
                cur->left = st.back();
                st.pop_back();
            }
            
            if(!st.empty()){
                st.back()->right = cur;
            }
            
            st.push_back(cur);
        }
        
        return st.front();
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 13,008评论 0 33
  • 很多次问自己,这两年最大的变化是什么? 有时候会说自己变得越来越谨慎了, 有时候会说自己变得越来越安静了, 有时候...
    北沐清音阅读 284评论 1 3
  • “不”就是一个字,有时,当你遇上一些事情的时候,你强大,你会说“不”,可如果你懦弱呢?(我也是)不敢说“不”呢? ...
    百合花王梓诺阅读 271评论 0 1
  • 不要什么文法,也不要什么深刻的逻辑,在2016年的最后一天下载了简书并写了一篇简单的总结,今天在想,要不然有一些记...
    瑞恩出本书阅读 361评论 0 0
  • 找个地方晒猫~ 我家Felix,年纪轻轻的一个猫坐过四次飞机去过三个国家精通两种语言,城市活动从三里屯的酒吧到南二...
    E_Lucifer阅读 173评论 0 0

友情链接更多精彩内容