当前位置: 首页 > news >正文

代码随想录day16

513.找树左下角的值

//迭代法中左视图的最后一位

    int findBottomLeftValue(TreeNode* root) {
        int result = 0;
        queue<TreeNode*> qe;
        if(root == nullptr) return result;
        qe.push(root);
        vector<int> lefts;
        while(!qe.empty()){
            int sz = qe.size();
            vector<int> tmp;
            for(int i = 0; i < sz; i++){
                TreeNode* nd = qe.front();
                qe.pop();
                tmp.push_back(nd->val);
                if(nd->left) qe.push(nd->left);
                if(nd->right) qe.push(nd->right);
            }
            lefts.push_back(tmp[0]);
        }
        result = lefts[lefts.size()-1];
        return result;
    }

//递归法,保证左侧优先遍历,注意回溯

    int maxDepth = INT_MIN;
    int result;
    void traverse(TreeNode*node, int depth){
        if(node->left == nullptr && node->right == nullptr){
            if(depth > maxDepth){
                maxDepth = depth;
                result = node->val;
            }
            return;
        }
        if(node->left){
            traverse(node->left, depth+1);
        }
        if(node->right){
            traverse(node->right, depth+1);
        }
        return;
    }

111.路径总和

    bool traverse(TreeNode* node, int target){
        if(node->left == nullptr && node->right == nullptr){
            if(target == node->val){
                return true;
            }else{
                return false;
            }
        }
        
        if(node->left){
            if(traverse(node->left, target - node->val)){
                return true;
            }
        }
        if(node->right){
            if(traverse(node->right, target - node->val)){
                return true;
            }
        }
        return false;
    }
    bool hasPathSum(TreeNode* root, int targetSum) {
        if(root == nullptr) return false;
        return traverse(root, targetSum);
    }

113.路径之和ii

    vector<vector<int>> result;
    vector<int> path;
    void traverse(TreeNode* node, int target){
        if(node->left == nullptr && node->right == nullptr){
            if(target == node->val){
                path.push_back(node->val);
                result.push_back(path);
                path.pop_back();
                
            }
            return;
        }
        
        if(node->left){
            path.push_back(node->val);
            traverse(node->left, target - node->val);
            path.pop_back();
        }
        
        if(node->right){
            path.push_back(node->val);
            traverse(node->right, target - node->val);
            path.pop_back();
        }
        return;
    }
    vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
        if(root == nullptr) return result;
        traverse(root, targetSum);
        return result;
    }

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

需记住中序,后序分割后的左右子串数量一致

    TreeNode* traverse(vector<int>& inorder, vector<int>& postorder){
        if(inorder.size() == 0 || postorder.size() == 0){
            return nullptr;
        }
        int rootval = postorder[postorder.size()-1];
        TreeNode* root = new TreeNode(rootval);
        if(postorder.size() == 1){
            return root;
        }
        int dim = 0;
        for(int i = 0; i < inorder.size(); i++){
            if(inorder[i] == rootval){
                dim = i;
            }
        }
        vector<int> leftinorder(inorder.begin(), inorder.begin()+dim);
        vector<int> rightinorder(inorder.begin()+dim+1, inorder.end());
        postorder.resize(postorder.size()-1);
        vector<int> leftpostorder(postorder.begin(), postorder.begin()+leftinorder.size());
        vector<int> rightpostorder(postorder.begin()+leftinorder.size(), postorder.end());

        root->left = traverse(leftinorder, leftpostorder);
        root->right = traverse(rightinorder, rightpostorder);
        return root;
    }
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        if(inorder.size() == 0 || postorder.size() == 0){
            return nullptr;
        }
        return traverse(inorder, postorder);
    }

105.从前序与中序遍历序列构造二叉树

TreeNode* traverse(vector<int>& preorder, vector<int>& inorder){
        if(preorder.size() == 0 || inorder.size() == 0){
            return nullptr;
        }
        int rootval = preorder[0];
        TreeNode* root = new TreeNode(rootval);
        if(preorder.size() == 1){
            return root;
        }
        int dim = 0;
        for(;dim < inorder.size(); dim++){
            if(inorder[dim] == rootval){
                break;
            }
        }
        vector<int> leftinorder(inorder.begin(), inorder.begin()+dim);
        vector<int> rightinorder(inorder.begin()+dim+1, inorder.end());
        preorder.erase(preorder.begin());
        vector<int> leftpreorder(preorder.begin(),preorder.begin()+leftinorder.size());
        vector<int> rightpreorder(preorder.begin()+leftinorder.size(),preorder.end());
        root->left = traverse(leftpreorder, leftinorder);
        root->right = traverse(rightpreorder, rightinorder);
        return root;
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size() == 0 || inorder.size() == 0){
            return nullptr;
        }
        return traverse(preorder, inorder);
    }

相关文章:

  • 【量化科普】Standard Deviation,标准差
  • 《Operating System Concepts》阅读笔记:p50-p61
  • 后端开发-分页游标设计(解决大数据量分页查询时的性能问题)
  • Bio-ORACLE数据分享[decade 2010-2020] [Surface layers]
  • Windows系统安装GPU驱动/CUDA/cuDNN
  • XML XML约束 一、XML约束概述
  • NVIDIA 的 Blackwell 架构:解析 B100、B200 和 GB200
  • 导入大模型产生的字符串的时候碰到的问题
  • Boringssl介绍
  • Java——权限修饰符
  • 内容中台重构智能服务:人工智能技术驱动精准决策
  • 使用Python添加、读取和删除Word文档属性
  • Mac系统下使用Docker快速部署MaxKB:打造本地知识库问答系统
  • 区块链技术前沿:DApp、DeFi与IDO开发的深度探索
  • Python正则替换终极指南:用re.sub玩转字符串魔法
  • 微信小程序消息推送解密
  • 【Cesium for Unreal】叠加/卸载GeoServer发布的多个shapefile
  • uniapp引入uview组件库(可以引用多个组件)
  • 网络运维学习笔记 015网工初级(HCIA-Datacom与CCNA-EI)NAT网络地址转换
  • 【零基础实战】STM32控制DRV8833电机驱动详解
  • 新建网站需要多少钱/seo网站推广的主要目的不包括
  • 网络运营师/seo推广怎么收费
  • 网站制作服务公司/g3云推广靠谱吗
  • 做公开网站的步骤/a站
  • 自己做网站卖水果/windows优化大师怎么样
  • seo是网站搜索引擎上的优化/营销推广方案ppt案例