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

代码随想录刷题学习日记

时间:2024-11-01 13:16:06浏览次数:3  
标签:遍历 dep 随想录 日记 right 刷题 root 节点 left

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

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

404.左叶子之和

计算给定二叉树的所有左叶子之和。(所有的左边的叶子节点的和)

提供参数:根结点root

关键思路:遍历,判断若为左叶子节点,则将值累加。

主要操作:

递归三要素

1.返回值类型和参数:

参数根结点root,返回值类型为int,需要返回树的左叶子节点的和。

2.终止条件:

如果当前节点为null,返回0;

如果当前节点是叶子节点,返回0;(这是由判断左叶子节点的逻辑决定的)

3.单层递归逻辑:

定义left接收递归左子节点返回的值;

判断左子节点是否为左叶子节点,如果是将值加入left;(这是代码中累加左叶子节点值的逻辑)

判断是否为左叶子节点是通过他的父节点判断,单凭一个节点的属性无法判断它是不是左叶子节点

定义right接收递归右子节点返回的值;

返回left+right;

代码大致如下:

    public int sumOfLeftLeaves(TreeNode root) {
        //终止条件
        //空节点
        if(root==null)return 0;
        //叶节点
        if(root.left==null&&root.right==null)return 0;
        //单层逻辑
        int left=sumOfLeftLeaves(root.left);
        //满足条件加入
        if(root.left!=null&&root.left.left==null&&root.left.right==null)left=root.left.val;
        int right=sumOfLeftLeaves(root.right);
        int sum=left+right;
        return sum;
    }

513.找树左下角的值(递归法)

给定一个二叉树,在树的最后一行找到最左边的值。

提供参数:根结点root

关键思路:前序遍历+回溯。在前序遍历过程中,如果遇到深度更大的就更新结果(深度最大的一定是最后一行),使用前序遍历的目的是确保找到的结果是最左边的值。前序遍历的顺序为:中,左,右,在遍历是如果是同一深度,则先遍历到最左边的,在同一深度的情况下遍历到右边的结果无法覆盖左边的,如果右边结果覆盖左边,说明右边深度更大,说明左边不是最后一行。

主要操作:

递归三要素

1.返回值类型和参数:

需要参数根结点root,还有深度dep,返回值类型为空。

2.终止条件:

完成函数即终止。

3.单层逻辑:

对当前递归层次的节点判断深度是否大于最大深度max,如果大于则更新结果,更新最大深度。

对当前节点的左子树进行遍历。

对当前节点的右子树进行遍历。

代码大致如下:

    public int findBottomLeftValue(TreeNode root) {
        findBL(root,1);
        return res;
    }
    public int maxdep;
    public int res;
    public void findBL(TreeNode node,int dep){
        //

        if(dep>maxdep){
            res=node.val;
            maxdep=dep;
        }
        if(node.left!=null){
            dep++;
            findBL(node.left,dep);
            dep--;
        }
        if(node.right!=null){
            dep++;
            findBL(node.right,dep);
            dep--;
        }
        
    }

如果使用层序遍历不使用递归更简单,在遍历时,将每层第一个元素加入到结果res中,最后循环结束时res中保存的就是最后一层最左边的节点。

标签:遍历,dep,随想录,日记,right,刷题,root,节点,left
From: https://blog.csdn.net/weixin_73939095/article/details/143429297

相关文章

  • 02链表算法/代码随想录
    前几天忙比赛,算法停了三天,继续开刷,不能停!!二、链表2.1删除链表中的元素两种方案无哨头:要删除节点的前一个结点指向删除节点的指向节点。头节点需要单独定义有哨头:头节点不需要单独定义实战力扣203/***Definitionforsingly-linkedlist.*publicclassLis......
  • 【开发日记】她趣介意时效超5分钟的付款交易。简单一招,应对!
    她趣介意时效超5分钟的付款交易。简单一招,应对!我们平台近期入网一个新客户是她趣。她趣这个企业比较关注下发时效,他们那边系统做了告警,当存在超5分钟时效的交易,就会发告警。然后,那边的人就来质问。并声称,现在只是放了3%的量,就总出现下发慢的交易,如果10月份依然存在,就不打算用我们......
  • 代码随想录一刷Day4
    59.螺旋矩阵II思路:找模式:1.从左到右,从上到下,从右到左,从下到上2.转几圈3.注意跟二分一样,统一原则4.注意for里面的循环条件54.螺旋矩阵思路:不能套用螺旋矩阵2 如果在此上进行修改,会漏很多情况动态移动上下边界  注意边界条件,这个需要<=,推一下便知 后面两题前缀......
  • 代码随想录之链表刷题总结
    目录1.链表理论基础2.移除链表元素3.设计链表4.翻转链表5.两两交换链表中的节点6.删除链表中的第N个节点7.链表相交8.环形链表1.链表理论基础链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后......
  • 牛客网刷题(4)(Java之(static)静态变量、静态方法、静态代码块、静态内部类)
    目录一、static关键字。(1)牛客网题目。(2)总结。<1>静态变量。(类变量)1、特点。2、补充与注意。3、代码演示。<2>静态方法1、特点。2、补充与注意。3、代码演示。<3>静态代码块。1、特点。2、补充与注意。3、代码演示。<4>静态内部类。1、特点。2、注意事项。3......
  • 代码随想录刷题学习日记
    仅为个人记录复盘学习历程,解题思路来自代码随想录代码随想录刷题笔记总结网址:代码随想录257.二叉树的所有路径给定一个二叉树,返回所有从根节点到叶子节点的路径。提供参数:根结点root关键思路:由于需要返回从根节点到叶子节点的路径,故采用前序遍历,每次遍历时将当前节点加......
  • 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......