代碼隨想錄算法訓練營|第十七天|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和 。刷题心得(c++)

电子设计实战:用MOS管手把手搭建D触发器电路(含时序分析避坑指南) 本文详细介绍了如何使用MOS管从零开始搭建D触发器电路,重点解析了建立时间和保持时间等关键时序参数对电路稳定性的影响。通过实测波形分析和避坑指南,帮助电子工程师掌握D触发器的实际搭建技巧与优化方法,提升数字电路设计的可靠性。 阅读详情

目录

讀題

110.平衡二叉树

自己看到题目的第一想法

看完代码随想录之后的想法

257. 二叉树的所有路径

自己看到题目的第一想法

看完代码随想录之后的想法

404.左叶子之和

自己看到题目的第一想法

看完代码随想录之后的想法

110.平衡二叉树 - 實作

思路

錯誤思路

正確思路

Code

錯誤代碼

正確代碼

257. 二叉树的所有路径 - 實作

思路

Code

思考

404.左叶子之和 - 實作

思路

Code

總結

自己实现过程中遇到哪些困难

今日收获,记录一下自己的学习时长

相關資料

110.平衡二叉树

257. 二叉树的所有路径

404.左叶子之和


讀題

110.平衡二叉树

自己看到题目的第一想法

看到完整題目,平衡二叉樹就是左右子樹的高度差不能超過一,假設超過一就不是,那其實跟求二叉樹的最小深度一樣,找出左右子樹的深度,之後進行比較,假設大於1 return false,小於等於1 return true;

看完代码随想录之后的想法

看完之後,我發現我對於高度跟深度有誤解,高度的話要用后序遍歷(下到上)來看,深度要用前序遍歷(上到下)來看,在求最大深度的時候,因為其實也可以看成求二叉樹的從葉子節點到根結點的高度,所以才可以使用前序遍歷。所以在遍歷的邏輯上以及思維上其實都進入了誤區,需要再找時間釐清二叉樹的想法

257. 二叉树的所有路径

自己看到题目的第一想法

看到第一眼是想我要怎麼給出結果,另外一個是我的左子樹要怎麼去跑,看得有點矇,直接看代碼隨想錄

看完代码随想录之后的想法

看完還是對回朔有點矇,這題代碼看完code之後有點理解思路,但是如果要更深入的解析,我需要花更久的時間才能做,但以目前的想法來說,因為卡哥有用一個取用地址的做法,在精簡版的代碼當中,path可以理解為區域變數,到了下一個遞迴就不見了,而完整版可以想像成全域變數,如果不pop,則異常,因為路徑仍在,我先寫完整版,協助我來理解這道問題

404.左叶子之和

自己看到题目的第一想法

看到之後感覺有點像所有路徑,一樣是到葉子節點,但是這邊要判斷說是不是左葉子節點,可能就要先去理解一下甚麼是左葉子節點了。

看完代码随想录之后的想法

看完之後,的確跟一般的二叉樹操作有所差異,但整體來說還是不難,只是我需要更多的時間來釐清這周二叉樹的部分。

110.平衡二叉树 - 實作

思路

錯誤思路

  1. get 左右子樹的深度
  2. 假設深度差超過一,則return false,否則return true;

錯誤點: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。我這只有比較root節點,並沒有去比較全部的節點

正確思路

  1. 用后序遍歷去找出右節點以及左節點的高度
  2. 假設右節點-左節點的絕對值高度大於一return -1,否則return 深度
  3. 主函數call 這個函數後,假設結果等於-1則return false,否則return ture;

Code

錯誤代碼

class Solution {
public:
    int getdepth(TreeNode* cur) {
        if(cur == NULL) return 1;
        int leftdepth = getdepth(cur->left);
        int rightdepth = getdepth(cur->right);
        return 1 + max(leftdepth, rightdepth);
    }
    bool isBalanced(TreeNode* root) {
        if(root == NULL) return 1;
        int rightdepth = getdepth(root->right);
        int leftdepth = getdepth(root->left);
        int gap = 0;
        if(rightdepth > leftdepth) gap = rightdepth - leftdepth;
        else gap = leftdepth - rightdepth;
        return gap <= 1 ? true:false;
    }
};

正確代碼

class Solution {
public:
    int gethight(TreeNode* cur) {
        if(cur == NULL) return 0;
        int lefthight = getdepth(cur->left);
        if(lefthight == -1) return -1;
        int righthight = getdepth(cur->right);
        if(righthight == -1) return -1;
        int result = 0;
        if(abs(lefthight - righthight) > 1) result = -1;
        else result = 1 + max(lefthight,righthight);
        return result;
    }
    bool isBalanced(TreeNode* root) {
        return gethight(root) == -1 ? false : true;
    }
};

257. 二叉树的所有路径 - 實作

思路

  1. 定義一個函數,傳入root、紀錄回朔過程的path以及result
  2. 將當前節點加到路徑當中(因為假設當前節點就是葉子節點,那如果終止邏輯在前,則會沒有將當前節點加入)
  3. 終止邏輯是當root在葉子節點的時候,所以是左右子樹為空的狀況
    1. 處理路徑回朔的過程
  4. 確定單層遞迴邏輯
    1. 假設左子點不為空遞迴左子點
      1. pop path
    2. 假設右子點不為空遞迴右子點
      1. pop path

Code

class Solution {
public:
    void traversal(TreeNode* cur, vector<int>&path, vector<string>& result) {
        path.push_back(cur->val);
        if(cur->left == NULL && cur->right ==NULL) {
            string sPath;
            for(int i = 0; i < path.size()-1; i++) {
                sPath += to_string(path[i]);
                sPath += "->";
            }
            sPath += to_string(path[path.size() - 1]);
            result.push_back(sPath);
        }
        if(cur->left) {
            traversal(cur->left, path, result);
            path.pop_back();
        }
        if(cur->right) {
            traversal(cur->right, path, result);
            path.pop_back();
        }
    }
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> result;
        vector<int> path;
        if(root == NULL) return result;
        traversal(root, path, result);
        return result;
    }
};

思考

寫的過程中,不斷的去思考,突然理解了回朔的過程,path是vector,底層是dequeue,在這個過程中,假設我一直走左子樹,那我到底的時候,我的path就是在左子樹的第一個葉子節點那我回朔的時候就要path就要pop一個葉子,假設有右節點下一個就會進到右節點,右節點結束之後,就會跳出,之後又把path給pop出來,這樣就達到回朔的目的了。

404.左叶子之和 - 實作

思路

  1. 將root傳入,並回傳int → 回傳左右子樹的左葉子的和
  2. 終止條件有兩個,當root為空以及當在葉子節點的時候
  3. 單層遞迴邏輯
    1. 假設左子樹的左孩子的左右子樹等於Null代表左子樹的左孩子為葉子節點將value帶入leftValue
    2. right value遞迴
    3. sum = leftvalue + right value
  4. return sum

Code

class Solution {
public:
    int sumOfLeftLeaves(TreeNode* root) {
        if(root == NULL) return 0;
        if(root->left == NULL && root->right == NULL) return 0;
        
        int leftValue = sumOfLeftLeaves(root->left);
        if(root->left && !root->left->left && !root->left->right) {
            leftValue = root->left->val;
        }
        int rightValue = sumOfLeftLeaves(root->right);
        int sum = leftValue + rightValue;
        return sum;
    }
};

總結

自己实现过程中遇到哪些困难

今天在實現的過程中發現自己對於二叉樹的知識還是不足,經驗上也是,所以在看到這三題的時候,其實很多時候是不清楚的,現在還需要再花時間理解

今日收获,记录一下自己的学习时长

今天至少知道自己對於前中後序的用法還是不太清楚以及高度與深度的求法,讓我可以在接下來兩天的假期中好好去理解

相關資料

● 今日学习的文章链接和视频链接

110.平衡二叉树

题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.平衡二叉树.html

257. 二叉树的所有路径

题目链接/文章讲解/视频讲解:https://programmercarl.com/0257.二叉树的所有路径.html

404.左叶子之和

题目链接/文章讲解/视频讲解:https://programmercarl.com/0404.左叶子之和.html

如何用IDEA查看jar包中代码 我们在使用Java进行开放时经常会需要下载些第三方的jar包进行相应的开发。有时候相关jar包的使用文档不足,满足不了我们的特定开发使用要求,这就需要我们查看jar包内的相关代码逻辑,本文将基于IDEA工具介绍如何查看相关jar包的代码逻辑 阅读详情

相关推荐

大模型LLM部署方式

建议根据实际需求选择方案,企业级服务优先考虑vLLM或TGI,个人用户可尝试Ollama或Hugging Face本地加载。若需完整代码示例,可参考网页2的VLLM实战或网页5的TGI部署案例。:高并发、低延迟的API服务,需分布式推理支持。:快速创建可分享的Web应用。:个人开发、快速原型验证。

u010249118的博客 516

算法训练营day17(二叉树04:平衡二叉树,所有路径,左叶子和)

/遇到叶子结点,叶子结点的左子结点必为0。//每当递归深入时,我们将当前节点的值添加到paths中,每一层递归在返回的时候都有一层remove;if ( rightHeight == -1){//出递归的条件。if ( leftHeight == -1){//出递归的条件。

weixin_61931006的博客 1237

EXCEL VBA 导出高清图片方法

EXCEL VBA 导出高清图片方法 将EXCEL表格内容另存为图片的方法有很多种,简单的比如“复制为图片格式并另存”,“打印成XPS”等等,本文着重的是利用VBA实现的方法。 该方法适合用于中大型图文表格输出为图片格式,方便传阅,在office2010及以上版本最为流畅。 具体看代码: Sub printA4() Dim rng As Range '定义截图范围变量 'm = 20...

nfser_burn7的专栏 1万+

代码随想录算法训练营第十五天 | 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和、222. 完全二叉树的节点个数

文档讲解:https://programmercarl.com/0222.%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%8A%82%E7%82%B9%E4%B8%AA%E6%95%B0.html。文档讲解:https://programmercarl.com/0257.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%89%80%E6%9C%89%E8%B7%AF%E5%BE%84.html。

m0_45175414的博客 784

ThingsKit物联网平台产品管理之物模型

物模型是ThingsKit物联网平台为产品定义的数据模型,用于描述产品的功能。本文介绍物模型相关概念和使用限制。

云腾五洲官方博客 1172

告别城市峡谷定位漂移:手把手教你用PSINS仿真INS/NHC/ODO组合导航(附代码获取)

本文详细解析了INS/NHC/ODO组合导航系统在城市峡谷环境中的应用,通过PSINS平台实现精准定位。文章涵盖核心原理、环境搭建、算法实现及性能优化,帮助开发者解决GNSS信号中断时的定位漂移问题,提升自动驾驶系统在复杂环境中的可靠性。

weixin_30329623的博客 429

算法训练营Day13 | 110.平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和,222. 完全二叉树的节点个数

110.平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和,222. 完全二叉树的节点个数。左叶子的定义:要从叶子的父节点判断,父节点的左节点不为空,且左节点没有左右节点。

weixin_43678826的博客 961

飞塔防火墙CVE-2022-40684漏洞复现:手把手教你搭建靶场环境(附调试技巧)

本文详细指导如何搭建Fortinet飞塔防火墙CVE-2022-40684认证绕过漏洞的靶场环境,涵盖虚拟机部署、网络配置、调试模式开启及漏洞原理分析。通过手把手教程,读者可掌握漏洞复现与深度调试技巧,深入理解该认证绕过漏洞的利用与防御。

h6i7j8的博客 694

代码随想录算法训练营第十七天| LeetCode 110. 平衡二叉树、257.二叉树的所有路径、404.左叶子之和

主要学习了回溯的思想

qq_64336203的博客 958

超详细MySQL 8.0安装与配置

MySQL的安装与配置 还不会安装MySQL的同学们,还不会配置MySQL的同学们,赶紧按照下面步骤操作起来,超详细安装步骤如下: 进入MySQL官网 1、点击download 2、点击MySQL Community Server 3、选好选项点击go to download page 4、点击download 5、点击no thanks,just start my download 6、选Server only,点击Next 7、点击Execute 8、点击

Turniper的博客 8751

保姆级教程:在Win10/Win11上搞定AppScan 10.0.0安装与许可证激活(含常见报错解决)

本文提供AppScan 10.0.0在Win10/Win11上的详细安装与许可证激活指南,涵盖环境准备、分步安装、文件替换技巧及常见报错解决方案。通过专业的安全测试工具部署实践,帮助用户高效完成安装并避免常见陷阱,提升Web应用安全扫描效率。

weixin_30800987的博客 424

代码随想录算法训练营第十七天 | 110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

文章讲解/视频讲解:https://programmercarl.com/0257.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%89%80%E6%9C%89%E8%B7%AF%E5%BE%84.html。用递归的方式进行判断:记录当前节点左右子树的高度h1,h2,如果h1和h2的高度差绝对值不超过1,则说明当前节点及其子树可构成一个平衡二叉树。每一次递归的处理中,对于当前节点,标记其来自于左节点或者右节点,如果当前节点属于叶子节点,且标记为左节点,则累加结果。

owlmo的博客 571

枪支/刀具检测 (gun, knife) - SIXray, Clasp Dataset,YOLOv11+UI界面+数据集

python复制编辑# 计算 CIoU 损失。

YOLO 538

代码随想录算法训练营day15 | 0110平衡二叉树、 257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数

1用作一个错误标志,标志某个子树不平衡。返回0则会失去对不平衡树的即时检测和终止功能。通过返回-1,你能够更高效地判断并终止不平衡树的检测,因此return -1是合理的选择。return -1能终止递归,而return 0不能终止,是因为-1被用作一个标志值,表示树或子树不平衡,而0被用作树的高度值。我们可以通过递归传播的机制,理解它们的区别。:方法接受一个树节点作为参数(root),然后递归计算该节点及其子树的高度。= -1:这里的root是整个树的根节点,

weixin_46053950的博客 912

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

算法训练营打卡Day15

今天继续打卡,进行二叉树相关题目的学习#本期思路分享偏少,题目难度适中,希望辩证地分析笔者给出的参考代码,仅供参考目录。

Zoe_igxgx的博客 809

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

代码随想录算法训练营第十七天 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

之前准备面试落下好几天的任务,这两天的博客就简单写了,具体思路注释在代码里。由于需要判断左叶子,所以判断父节点的左孩子的左右孩子是否为空。结果也是从下往上累加返回,使用后序遍历的递归。前序遍历的递归法 + 回溯。

Danny_8的博客 771

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

代码随想录算法训练营第十五天 | LeetCode 110.平衡二叉树,257. 二叉树的所有路径, 404.左叶子之和 , 222.完全二叉树的节点个数

然后我们进入判断的逻辑,首先这道题我们使用递归的方法,先把返回条件确认了,那就是为空或者就一个节点直接返回true,否则就先判断中,就是判断此root节点的左右子树差的绝对值是否小于等于1,如果大于1返回false。257题有点意思,运用到了递归和回溯的知识,首先判断root是否为空,如果为空返回;首先以root节点为中心,如果root为空或者它左右子树均为空,那么直接返回(此时结果为0),否则再判断root是否存在左子树并且左子树是叶子结点,如果是就将该左子树的值加入到我们的result结果中。

2401_83970525的博客 745

【代码随想录】【算法训练营】【第17天】 [110]平衡二叉树 [257]二叉树的所有路径 [404]左叶子之和

思路及算法思维,指路。题目来自。day 17,又是一个令人愉快的周五~

day day up 303

代码随想录算法训练营第十四天|222.完全二叉树的节点个数,110.平衡二叉树,257.二叉树的所有路径,404左叶子之和

222.完全二叉树的节点个数110.平衡二叉树257.二叉树的所有路径404左叶子之和。

weixin_72770304的博客 714

代码随想录算法训练营第十七天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

题目链接/文章讲解/视频讲解:https://programmercarl.com/0257.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%89%80%E6%9C%89%E8%B7%AF%E5%BE%84.html。父节点的左孩子存在,并且父节点的左孩子的左节点和右节点都不存在,那么当前节点就是左叶子。给你一个二叉树的根节点 root ,按任意顺序,返回所有从根节点到叶子节点的路径。根节点的左子树的左叶子之和 + 根节点的右子树的左叶子之和 = 最终的结果。

m0_63255131的博客 367

代码随想录算法训练营第十七天|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

返回所有左叶子之和的话就需要判断当前节点是否为左叶子,如果是左叶子则返回值。那核心就是怎么判断当前的节点为左叶子,左叶子:当前节点是左子节点且无下级节点。整体思路类似,都是使用后序遍历计算高度值,但是代码随想录的方法返回的只是节点最大高度,而我的方法返回的左右节点的高度差。代码随想录返回的高度,使用一个-1代表高度超过2。递归法这里看起来应该使用前序遍历,并且先遍历完左节点后需要将中间节点返回回去让右边的节点继续迭代。使用后序遍历,后序遍历可以拿到左、右节点的高度,当差大于1时就直接返回false。

shanshe7934的博客 121

【代码随想录算法训练营第十七天 | LeetCode110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和】

【代码】【代码随想录算法训练营第十六天 | LeetCode110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和】

cattte的博客 490

代码随想录算法训练营第十七天|110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和

二叉树

m0_52925186的博客 314

代码随想录训练营13| 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 222.完全二叉树的节点个数

110.平衡二叉树。

2401_89520079的博客 185

【算法训练营】二叉树专题(一)

本篇为二叉树专题的刷题题单,总共7道题,每道题都有对应的链接。边听歌边刷题吧~

进一步有一步的欢喜 553

代码随想录算法训练营第十七天| 110.平衡二叉树、257.二叉树的所有路径、 404.左叶子之和

题目链接:https://leetcode.cn/problems/balanced-binary-tree/description/文章链接:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html。

qq_44388663的博客 297
上一篇: 代碼隨想錄算法訓練營|第十六天|104.二叉树的最大深度 、111.二叉树的最小深度 、222.完全二叉树的节点个数。刷题心得(c++)
下一篇: 代碼隨想錄算法訓練營|第十八天|513. 找树左下角的值、112. 路径总和、113. 路径总和II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二。刷题心得(c++)
RVLIN
博客等级 码龄5年 104粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值