首页 > 其他分享 >代码随想录——二叉树17-路径总和

代码随想录——二叉树17-路径总和

时间:2024-11-13 10:59:30浏览次数:1  
标签:return cur 17 随想录 二叉树 ans path root targetSum

image
image
image
image

这两道题目对于递归函数的返回值是不同的,这里进行总结,二叉树遍历中递归函数返回值何时有何时没有。

这里总结如下三点:

  1. 如果需要搜索整棵二叉树不用处理递归返回值,递归函数就不要返回值。(这种情况就是路径总和ii)

  2. 如果需要搜索整棵二叉树需要处理递归返回值,递归函数就需要返回值。 (这种情况我们在236. 二叉树的最近公共祖先中介绍)

  3. 如果要搜索其中一条符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。(路径总和i的情况)

代码
路径总和

class Solution {
public:
    bool hasPathSum(TreeNode* root, int targetSum) {
        //显然用递归
        if(root == nullptr)return false;
        targetSum -= root->val;
        if(root->left == nullptr && root->right == nullptr ){//叶子
            if(targetSum == 0)return true;
            else return false;
        }
        return hasPathSum(root->left,targetSum) || hasPathSum(root->right,targetSum);

    }
};

路径总和ii

class Solution {
public:
    void traversal(TreeNode* cur,int targetsum,vector<int> path,vector<vector<int>>& ans){
        if(cur == nullptr)return;
        targetsum -= cur->val;
        path.emplace_back(cur->val);
        if(cur->left == nullptr && cur->right == nullptr && targetsum == 0){
            ans.emplace_back(path);
            return;
        }
        if(cur->left){
            traversal(cur->left,targetsum,path,ans);
        }
        if(cur->right){
            traversal(cur->right,targetsum,path,ans);
        }

    }

    vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
        vector<vector<int>> ans;
        vector<int> path;
        traversal(root,targetSum,path,ans);
        return ans;
    }
};

标签:return,cur,17,随想录,二叉树,ans,path,root,targetSum
From: https://www.cnblogs.com/neromegumi/p/18543448

相关文章

  • 实验17:解释器模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解解释器模式的动机,掌握该模式的结构;2、能够利用解释器模式解决实际问题。 [实验任务一]:解释器模式某机器人控制程序包含一些简单的英文指令,其文法规则如下:expression::=directionactiondistance|compos......
  • 11.17
    [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:画出对应的类图;提交源代码;packageadapter;//Cat接口interfaceCat{voidcry();voidcatchMouse();}//Dog接口interfaceDog{voidwang();voida......
  • 力扣 653. 两数之和 IV 二叉树/binary-tree two-sum IV
    数组系列力扣数据结构之数组-00-概览力扣.53最大子数组和maximum-subarray力扣.128最长连续序列longest-consecutive-sequence力扣.1两数之和N种解法two-sum力扣.167两数之和IItwo-sum-ii力扣.170两数之和IIItwo-sum-iii力扣.653两数之和IVtwo-sum-IV力......
  • 代码随想录算法训练营第二十三天| leetcode39. 组合总和、leetcode40.组合总和II、lee
    1leetcode39.组合总和题目链接:39.组合总和-力扣(LeetCode)文章链接:代码随想录视频链接:带你学透回溯算法-组合总和(对应「leetcode」力扣题目:39.组合总和)|回溯法精讲!_哔哩哔哩_bilibili思路:跟之前差不多,就是将他的循环改一下,但是我发现有重复的数值了,不知道如何删除1.1自......
  • Solution - Codeforces 1217E Sum Queries?
    对于这个“好的”的判定条件看起来有点奇怪,不妨结合上题目要求的“最小\(sum\)”一起考虑。因为要最小化\(s_p\),所以一个比较直观的想法是先从选的数个数入手。考虑到如果选的只有\(1\)个数\(a_i\),那么\(sum=a_i\),一定是好的,排除。如果选的是\(2\)个数\(a_i,a_j\),......
  • 全局平衡二叉树 (GBST) 小记
    全局平衡二叉树(GBST)小记以下全局平衡二叉树简称\(\text{GBST(GlobelBalancedSearchTree)}\)。我认识的大多数人,对\(\text{GBST}\)的理解基本上都是静态\(\text{LCT}\),或者静态\(\text{TopTree}\),不过我对\(\text{LCT}\)的理解可能还差一点,所以我不打算从阉割\(......
  • 题解:「2017 山东一轮集训 Day7」逆序对
    LibreOJ6077前置知识:生成函数、组合数先考虑平方怎么做。\(f_{i,j}\)表示处理了前\(i\)个值,逆序对有\(j\)个。显然可以转移到\(f_{i+1,j},f_{i+1,j+1},f_{i+1,j+2},...,f_{i+1,j+i}\)。然后发现这个东西是个很简单的递推,而且长得很生成函数,于是可以很自然的写成\[1\t......
  • 洛谷 P1772 [ZJOI2006] 物流运输 做题记录
    很神经的一道题。令\(val_{i,j}\)表示从第\(i\)天到第\(j\)天每天都走一条道路,单次的最小花费。可以枚举\(\{i,j\}\)然后把在这个区间里的所有点设置成不可达,每一个\(\{i,j\}\)都可以用floyd算,时间复杂度\(O(n^2m^3)\)。令\(f_i\)表示第\(i\)天的最小花费,那么......
  • 2024.11.12 1703版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • 11.11 ~ 11.17
    11.11早晨去级部转了一圈然后没看见人就直接回来了PEP说没事?不懂,有老师叫我再说(上午模拟赛。好像是直接搬了场梦熊S组上来,有少部分人看过题......