首页 > 其他分享 >代码随想录刷题学习日记

代码随想录刷题学习日记

时间:2024-10-31 13:47:21浏览次数:7  
标签:res 路径 随想录 日记 path null root 节点 刷题

仅为个人记录复盘学习历程,解题思路来自代码随想录

代码随想录刷题笔记总结网址:
代码随想录

257. 二叉树的所有路径

给定一个二叉树,返回所有从根节点到叶子节点的路径。

提供参数:根结点root

关键思路:由于需要返回从根节点到叶子节点的路径,故采用前序遍历,每次遍历时将当前节点加入到路径上,在遍历到叶子节点(左右子结点皆为null)的时候将路径加入到结果集中。

主要操作:

递归三要素:

1.返回值类型和传入参数:

传入结果集res,路径path,根结点root,返回值类型为void

2.终止条件:

如果左右子结点皆为空,说明到达叶子节点,执行操作:将路径加入到结果集中。

3.单层递归逻辑:

如果左子节点不为空,在路径上加入"->",继续遍历左子节点,遍历结束后,将"->"弹出。

如果右子节点不为空,在路径上加入"->",继续遍历右子节点,遍历结束后,将"->"弹出。

这里由于终止条件判断为左右子节点是否为null,所以将对节点的操作提前到对终止条件的判断前,这样可以将路径的最后一个节点加入到路径中。

代码大致如下:

    public List<String> binaryTreePaths(TreeNode root) {
        List<String>res=new ArrayList<>();
        String path="";
        if(root==null)return res;
        travel(root,path,res);
        return res;
    }

    public void travel(TreeNode root, String path,List<String> res){
        path+=root.val;
        //终止条件
        if(root.left==null&&root.right==null){
            res.add(path);
            return;
        }
        //单层递归操作
        if(root.left!=null){
            path+="->";
            travel(root.left,path,res);
            path=path.substring(0,path.length()-2);
        }
        if(root.right!=null){
            path+="->";
            travel(root.right,path,res);
            path=path.substring(0,path.length()-2);
        }
    }

标签:res,路径,随想录,日记,path,null,root,节点,刷题
From: https://blog.csdn.net/weixin_73939095/article/details/143392162

相关文章

  • Leetcode刷题Python之3165.不包含相邻元素的子序列的最大和
    提示:利用线段树解决不包含相邻元素的子序列最大和问题。文章目录一、题目描述示例二、解题思路1.思路分析2.线段树的状态设计3.线段树的操作三、代码实现代码详细解释四、总结时间复杂度分析一、题目描述给定一个整数数组nums和一个二维数组queries,其中q......
  • 刷题总结——区间和
    前缀和前缀和是一种解决区间求和问题的辅助方法,前缀和只适用于固定区间(数组、树等),如果区间元素发生变化,则不适用,此时需要考虑树状数组、线段树等方式。问题类型常见的问题也是和DP一样,求最大/最小/方案数。类型题目备注前缀和+哈希LC560两数之和思路前缀和+......
  • 代码随想录算法训练营day31| 56. 合并区间 738.单调递增的数字
    学习资料:https://programmercarl.com/0056.合并区间.html#算法公开课贪心PART5over学习记录:56.合并区间(也是找重叠区间,但是是跟result[-1]比,只用比右边界;更新result[-1][1]为更大值)点击查看代码classSolution(object):defmerge(self,intervals):"""......
  • 代码随想录算法训练营第十二天| 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大
    226.翻转二叉树题目链接:.-力扣(LeetCode)文章讲解:代码随想录视频讲解:听说一位巨佬面Google被拒了,因为没写出翻转二叉树|LeetCode:226.翻转二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com......
  • 代码随想录算法训练营第十三天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子
    110.平衡二叉树题目链接:.-力扣(LeetCode)文章链接:代码随想录视频链接:后序遍历求高度,高度判断是否平衡|LeetCode:110.平衡二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com,这里刷题顺序,详......
  • CF做题日记1
    当一个题贪心和\(dp\)都可能,而又无法证明贪心假了,可以通过数据范围推测用什么,实在不行可以先尝试\(dp\),看看能否优化。一个题中给的文字条件,可以先尝试将它转化为数学或计算机语言,这样可能会发现一些性质。咱们举个例子CF1842A,这题是个红题应该很简单(但我没做出来)假设所......
  • 代码随想录 -- 动态规划 -- 01背包理论基础
    46.携带研究材料(第六期模拟笔试)思路:dp[i][j]含义:在(0,i)之间任意选取物品放入容量为j的背包中,使背包的价值最大。递推公式:当前背包容纳不下第i个物品,不选第i个物品,此时背包的价值:dp[i][j]=dp[i-1][j]。当前背包容纳得下第i个物品时,且选择第i个物品,此时背包的价值:dp[i][j......
  • 10月30日记录(《代码大全》(第二版)精读笔记)
    《代码大全》中对于“代码质量”和“设计原则”的探讨深刻而全面,给我留下了深刻的印象。在当今快速发展的软件开发环境中,理解和应用这些概念对于提升开发效率和软件质量至关重要。首先,关于代码质量,麦克康奈尔强调了代码不仅需要正确实现功能,还必须具备良好的可读性和可维护性。代......
  • [Python学习日记-58] 开发基础练习1——员工信息查询
    [Python学习日记-58]开发基础练习1——员工信息查询简介题目答案简介        该练习结合了函数和一些常用的模块开发了一个使用命令行交互的员工信息查询程序,可以巩固实践之前学习的内容。题目一、程序需求        现要求你写⼀个简单的员⼯信息增删......
  • 代码随想录刷题学习日记
    仅为个人记录复盘学习历程,解题思路来自代码随想录代码随想录刷题笔记总结网址:代码随想录222.完全二叉树的节点个数给出一个完全二叉树,求出该树的节点个数。提供参数:根结点root主要操作:遍历所有节点,记录节点数。代码(递归法)大致如下:publicintcountNodes(TreeNoder......