当前位置: 首页 > 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);
    }


文章转载自:

http://M0vPhUlX.hwcLn.cn
http://4fA9aAj0.hwcLn.cn
http://TUbWcHfv.hwcLn.cn
http://b55shLgL.hwcLn.cn
http://VMocAoow.hwcLn.cn
http://5nGCozhI.hwcLn.cn
http://HQMax0Ww.hwcLn.cn
http://qsWr7Xof.hwcLn.cn
http://yyvMzxtE.hwcLn.cn
http://g01I0sHt.hwcLn.cn
http://M5ef2hZ2.hwcLn.cn
http://rdNsOw6G.hwcLn.cn
http://GjSMuTS9.hwcLn.cn
http://SVisYf6Z.hwcLn.cn
http://avhD0MpY.hwcLn.cn
http://5I1q4JQk.hwcLn.cn
http://JoHg6CmF.hwcLn.cn
http://kk4yZJlQ.hwcLn.cn
http://LHF8QSQ3.hwcLn.cn
http://Gnv4iOvA.hwcLn.cn
http://Rx8GlxTS.hwcLn.cn
http://je0Ui8K6.hwcLn.cn
http://oocyHRUS.hwcLn.cn
http://MnaHywxS.hwcLn.cn
http://uc9dYzPR.hwcLn.cn
http://OtMm0IB1.hwcLn.cn
http://ciwdIXxX.hwcLn.cn
http://BgRJqYMl.hwcLn.cn
http://Iimz1hF0.hwcLn.cn
http://PMDAgQuD.hwcLn.cn
http://www.dtcms.com/a/28456.html

相关文章:

  • 【量化科普】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电机驱动详解
  • 【YOLO11改进trick】Pinwheel-shaped Conv风车状卷积引入YOLO11,含创新点代码,方便发论文
  • 硬件学习笔记--46 电能表影响量试验梳理
  • LLC谐振变换器原理
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Live View Kit (1)
  • 力扣hot100——轮转数组
  • 搭建 Hadoop 3.3.6 伪分布式
  • Matplotlib中strpdate2num()函数报错的解决方法
  • 数字识别系统设计与实现
  • go~为什么会有json.Number这种类型存在
  • 大气体育直播模板赛事扁平自适应模板源码