立志重刷代码随想录60天冲冲冲!!——第二十五天

106.从中序与后序遍历序列构造二叉树

这道题是之前二叉树没来得及写的,今天补上

class Solution {
public:
    // 1、后序数组为空,返回空节点
    // 2、后序数组最后一个元素,为节点元素
    // 3、以上一节点元素作为切割点,寻找中序数组的位置
    // 4、切割中序数组
    // 5、切割后序数组
    // 6、递归处理左右区间 
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        if (postorder.size() == 0) return NULL; // 终止条件
        int postValue = postorder.back();   // 后序最后一个元素
        TreeNode* node = new TreeNode(postValue); 
        if (postorder.size() == 1) return node; // 如果后序数组就剩一个元素,返回刚刚创建的节点
        
        int postIdx = 0;
        for (int i = 0; i < inorder.size(); i++) {
            if (inorder[i] == postValue) {
                postIdx = i;
                break;
            }
        }

        // 切割中序 (左闭右开)
        vector<int> Leftinorder(inorder.begin(), inorder.begin() + postIdx);
        vector<int> Rightinorder(inorder.begin() + postIdx + 1, inorder.end());
        // 切割后序 (左闭右开)
        vector<int> Leftpostorder(postorder.begin(), postorder.begin() + postIdx);
        vector<int> Rightpostorder(postorder.begin() + postIdx, postorder.end() - 1);

        node->left = buildTree(Leftinorder, Leftpostorder);
        node->right = buildTree(Rightinorder, Rightpostorder);

        return node;
    }
};

491.递增子序列

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    void backtracking(vector<int>& nums, int startIdx) {
        if (path.size() >= 2) {
            res.push_back(path);
            // 不要加return!!
        }

        unordered_set<int> uset;
        for (int i = startIdx; i < nums.size(); i++) {
            if ((!path.empty() && path.back() > nums[i]) 
                || uset.find(nums[i]) != uset.end()) continue;

            uset.insert(nums[i]); // 在一层中,不可以重复。但下一次递归会初始化,也相当于回溯
            path.push_back(nums[i]);
            backtracking(nums, i + 1);
            path.pop_back();
        }
    }

    vector<vector<int>> findSubsequences(vector<int>& nums) {
        backtracking(nums, 0);
        return res;
    }
};

代码随想录更新 文章被收录于专栏

冲冲冲冲冲冲!

全部评论

相关推荐

CISYA:啊?这么溜的简历会难?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务