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

基于51单片机的通讯聊系统 通过编写51单片机通讯聊程序,掌握51单片机的各个模块的知识点和运用C语言编写51单片机的能力。用51单片机与口袋开发板设计实现一个单片机与电脑串口助手实现通讯功能的程序。程序的主要功能如下: 1 OLED初始化显示Welcome to Bluetooth communication! 字符串。 2 程序开始时处于接收信息模式, 电脑串口助手发送信息时,将从初始化字符第一个开始显示,电脑串口助手发送信息后,蜂鸣器响铃2秒右。 3 每次同时按下右键时,可以轮流切换接收/发送信息模式 4 在发送信息模式时 阅读详情

● 110.平衡二叉树

文字
视频
题目

1.思路

方法一:递归
可以用迭代实现 但我没看懂
在这里插入图片描述
此题既然要求比较高度,必然是要后序遍历。
求深度应用前序遍历

递归三步曲分析:
1.明确递归函数的参数和返回值
参数:当前传入节点。 返回值:以当前传入节点为根节点的树的高度。
那么如何标记左右子树是否差值大于1呢?
如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没有意义了。
所以如果已经不是二叉平衡树了,可以返回-1 来标记已经不符合平衡树的规则了。
2.明确终止条件
递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0
3.明确单层递归的逻辑
如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的差值。
分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。

此时递归的函数就已经写出来了,这个递归的函数传入节点指针,返回以该节点为根节点的二叉树的高度,如果不是二叉平衡树,则返回-1。
方法二:迭代法
没看

2.代码实现

递归法
class Solution {
    private int getheight(TreeNode root){
        if(root==null)
            return 0;
        int leftheight=getheight(root.left);
        if(leftheight==-1)
            return -1;
        int rightheight=getheight(root.right);
        if(rightheight==-1)
            return -1;
        if(Math.abs(leftheight-rightheight)>1)
            return -1;
        else
            return Math.max(leftheight,rightheight)+1;         
    }
    public boolean isBalanced(TreeNode root) {
        return getheight(root)==-1?false:true;
    }
}

● 257. 二叉树的所有路径

文字
视频
题目

1.思路

方法一:递归

这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。
在这道题目中将第一次涉及到回溯,因为我们要把路径记录下来,需要回溯来回退一个路径再进入另一个路径。
在这里插入图片描述
先使用递归的方式,来做前序遍历。要知道递归和回溯就是一家的,本题也需要回溯。

递归三步曲:

1.递归函数参数以及返回值
要传入根节点,记录每一条路径的path,和存放结果集的result,这里递归不需要返回值,
2.确定递归终止条件
本题要找到叶子节点,就开始结束的处理逻辑了(把路径放进result里)。
那么什么时候算是找到了叶子节点? 是当 cur不为空,其左右孩子都为空的时候,就找到叶子节点。
3.确定单层递归逻辑
因为是前序遍历,需要先处理中间节点,中间节点就是我们要记录路径上的节点,先放进path中。
然后是递归和回溯的过程,上面说过没有判断cur是否为空,那么在这里递归的时候,如果为空就不进行下一层递归了。
递归完,要做回溯,因为path 不能一直加入节点,它还要删节点,然后才能加入新的节点。
回溯和递归是一一对应的,有一个递归,就要有一个回溯,所以回溯要和递归永远在一起

2.代码实现

class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> res= new ArrayList<>();//存所有路径
        if(root==null)
            return res;
        List<Integer> paths=new ArrayList<>();//存放遍历的每一条路径
        tranversal(root,paths,res);
        return res;
    }
    private void tranversal(TreeNode root, List<Integer> paths, List<String> res){
        paths.add(root.val);
        if(root.left==null&& root.right==null)
        {
            StringBuilder sb=new StringBuilder();
            for(int i=0;i<paths.size()-1;i++){
                sb.append(paths.get(i)).append("->");
            }
            sb.append(paths.get(paths.size()-1));
            res.add(sb.toString());
            return;
        }
        if(root.left!=null){
            tranversal(root.left,paths,res);
            paths.remove(paths.size()-1);
        }
        if(root.right!=null){
            tranversal(root.right,paths,res);
            paths.remove(paths.size()-1);
        }
    }
}

● 404.左叶子之和

文字
视频
题目

1.思路

左叶子的明确定义:节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点
在这里插入图片描述
判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子。

如果该节点的左节点不为空,该节点的左节点的左节点为空,该节点的左节点的右节点为空,则找到了一个左叶子

if (node->left != NULL && node->left->left == NULL && node->left->right == NULL) {
    左叶子节点处理逻辑
}

递归的遍历顺序为后序遍历(左右中),是因为要通过递归函数的返回值来累加求取左叶子数值之和。

递归三部曲:
1.确定递归函数的参数和返回值
判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int
使用题目中给出的函数就可以了。
2.确定终止条件
如果遍历到空节点,那么左叶子值一定是0
只有当前遍历的节点是父节点,才能判断其子节点是不是左叶子。 所以如果当前遍历的节点是叶子节点,那其左叶子也必定是0
3.确定单层递归的逻辑
当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。

迭代法看不懂

2.代码实现

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if(root==null)
            return 0;
        if(root.left==null && root.right ==null)
            return 0;
        int leftnum = sumOfLeftLeaves(root.left);//左
        //从父结点判断是否是左叶子
        if(root.left!=null&& root.left.left==null && root.left.right==null) // 左子树就是一个左叶子的情况
            leftnum=root.left.val;
        int rightnum=sumOfLeftLeaves(root.right);//右
        int sum=leftnum+rightnum;//中
        return sum;
    }
}
使用 Visual Studio Code 连接 ABAP On-Premise 系统做开发的详细配置步骤 本文详细介绍了如何在Visual Studio Code中通过ABAP Development Tools扩展连接ABAP On-Premise系统。关键步骤包括:通过Ctrl+Shift+P打开命令行面板选择「ABAP: New Destination...」创建RFC连接(仅支持SSO单点登录),选择本地SAPGUI中已有的系统,输入Client ID、语言和用户名(无需密码),最后将目标系统添加到工作区即可开始开发。文章强调了企业安全考虑下仅支持SSO的设计理念,并展示了连接配置的JSON格式示例。整 阅读详情

相关推荐

《用 R 探索医药数据科学》目录(持续更新,内容已超 230 万字)|订阅前后请务必认真阅读

我们重磅推出《用 R 探索医药数据科学》专栏!本文作为专栏【订阅后首读】的核心内容,堪称开启学习之旅的 “入门钥匙”,也是整个专栏最关键的一篇指引文。文中不仅完整呈现了专栏 9 大核心篇章 + 问答板块的详细目录,更囊括了订阅后必知的核心要点 —— 从阅读设备、实操工具的使用建议,到学习路径、更新规则的清晰说明,再到问题反馈、感悟记录的实用方法,一站式帮你摸清专栏框架、找准学习方向。建议各位订阅者务必认真阅读、吃透内容,这能让你后续的学习更高效、少走弯!

MD Code 1万+

数据结构之二叉树的练习题

数据结构之二叉树的练习题

容铎的博客 1451

北斗导航:提高RTK定位精度的GIS应用

其中,RTK(Real-Time Kinematic)定位技术是一种实时差分定位技术,通过利用基准站的观测数据来对移动站的测量值进行差分处理,以提高定位精度。差分处理的关键是基准站的观测数据,基准站通过全球定位系统(如北斗导航系统)获取卫星信号并记录观测数据。通过使用RTK定位技术,结合北斗导航系统的观测数据和差分处理,可以实现高精度的定位结果。我们将介绍RTK定位的原理、使用北斗导航系统进行RTK定位的步骤,以及如何将定位结果与GIS数据进行集成和可视化展示。步骤1:设置基准站和移动站。

OvzStream的博客 447

平衡二叉树

定义:平衡二叉树是一棵二叉排序树,或者为空,或者满足以下条件: (1)右子树高度差的绝对值不大于1; (2)右子树都是平衡二叉树。 平衡因子:对于二叉树中任一结点T,其平衡因子(Balance Factor,简称 BF)定义为BF(T) = hL-hR,其中hL和hR分别为T的、右子树的高度。 平衡化旋转:如果在一棵 AVL 树中插入一个新结点后造成失衡,则必须重新调整树的结构,使之恢复平衡。我们称此调整平衡的过程为平衡旋转。 平衡化旋转的类别 LL型:新插入结点在A的孩子(L)的子树

zhenzhu2882的博客 4614

AVL树(三)之 Java的实现

概要 前面分别介绍了AVL树"C语言版本"和"C++版本",本章介绍AVL树的Java实现版本,它的算法与C语言和C++版本一样。内容包括: 1. AVL树的介绍 2. AVL树的Java实现 3. AVL树的Java测试程序 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3577479.html   更多内容: 数据结构与算法系列 目录

WO的专栏 1107

构造平衡二叉树例题_LeetCode 例题精讲 | 03 从二叉树遍历到回溯算法

本篇的主题是回溯算法,共有两道例题:例题一,LeetCode 113 - Path Sum II(Medium) 给定一个二叉树和一个目标和,找到所有从根结点到叶结点的路径,使得路径上所有结点值相加等于目标和。示例: 给定如下二叉树,以及目标和 sum = 22。返回: [ [5,4,11,2], [5,8,4,5]]例题二,LeetCode 78 - Subsets(Medium) 给定一组不含...

weixin_39996762的博客 553

数据结构选择题——查找

数据结构选择题——查找

weixin_74727063的博客 1940

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

如果节点为空就返回空(什么也不干,结束这条线),不为空就加上该节点的值,再判断该节点是否是叶节点,是叶节点就压入v中并返回,不然就加上->,向右子树递归。这时又出现了一个错误,那就是当这棵树只有根节点一个节点的情况,由于我们先将根节点的值初始化了,然后传进右节点递归(因为想要去不停的加->num),这种情况下就没有叶节点了,无法返回。递归查看每个节点的右子树高度,如果右子树不为平衡二叉树就返回-1(不为平衡树,右不为平衡树,右相减不满足平衡树规律),最后判断根节点高度是否为-1来返回是否。

wtmbill的博客 327

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

求出右子树各自的深度,相减取差值绝对值,如果大于1则说明不是平衡二叉树,小于等于1则为平衡二叉树

stupidyinu的博客 477

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

最后一个题,挺不好想的,我们如何处理叶子,因为叶子是在递归结束的时候哦,因此,我们可以放到递归后面,进行处理;的时候,我们会一直递归到叶子节点,这个时候我们会返回0;因为叶子节点的子树叶子之和加上右子树叶子之和为0;我们需要先判断是否是叶子节点,但是我们无法通过叶子节点判断是否是叶子节点;如果右节点返回的是-1 ,说明已经不是平衡了,那我们只需要向上返回-1;因为我们执行到了叶子节点,我们就可以判断是否是叶子,如果是的话。我们需要求出每个节点的高度,然后我们需要判断右节点的高度;

qq_63449734的博客 91

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

栈 以下题目主要是利用栈的特性注意事项:1、要确定栈非空才能访问栈顶元素,否则越界。

heitong_fu的博客 1045

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

#二叉树: #简单:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的右两个子树的高度差的绝对值不超过 1。

叫我豆包就好了的博客 266

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

题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html注意:深度和高度不同注意:1.理解这种最终return的写法2.循环终止条件返回0或者1都可以,只要不是-1就行,因为这里的。

weixin_44776979的博客 144

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

257. 二叉树的所有路径

m0_73994161的博客 72

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

257. 二叉树的所有路径

2301_78266314的博客 120

代码随想录算法训练营第十七|Leetcode110 平衡二叉树Leetcode257 二叉树的所有路径Leetcode404 叶子之和

在之前的文章中已经讨论过对于高度和深度使用哪种遍历方式最优,因为我们需要将子树的平衡结果返回给上一结点,所以我们必然需要先遍历右结点随后中结点才能达到目的,因此我们在单层递归中使用。因为我们需要将右子树的叶子之和返回给其父结点,因此需要先对右遍历,然后在处理中时将右子树的叶子结点加和返回给自身即可,因此其单层遍历逻辑使用。如果我们遍历到叶子结点的时候,我们无法将叶子结点的值返回给其父结点,因此我们只需要遍历到其父结点,通过。输入:root = [1,2,2,3,3,null,null,4,4]

Demok123的博客 1807

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

二叉树平衡二叉树路径叶子

leehal的博客 923

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

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

北天的博客 1191

代码随想录算法训练营第 15 |LeetCode110平衡二叉树 LeetCode257二叉树的所有路径 LeetCode404叶子之和 LeetCode222完全二叉树节点之和

从上向下求,例如求深度和路径,用前序遍历; 从下向上求,例如求高度,用后序遍历。

2301_79647020的博客 1273

代码随想录算法训练营Day17】 110.平衡二叉树 257. 二叉树的所有路径 404.叶子之和

因为平衡二叉树的概念是每个节点的右子树高度差的绝对值不大于1,所以就可以比较每个节点右子树的。另一个疑问,为啥不能用int类型直接加,哦应该用返回,不能作为参数。精准踩雷,没看清是叶子,以为是所有节点。

Tammy2001的博客 1025

电子产品EMC设计标准接口电路EMC参考设计原理图大全(66份).zip

电子产品EMC设计标准接口电路EMC参考设计原理图大全(66份):AC110V-220VEMC设计标准电路.pdfAC110V-AC220V.pdfAC24V接口EMC设计标准电路.pdfAC380VEMC设计标准电路.pdfAV接口.pdfAV接口EMC设计标准电路.pdfCAN接口.pdfCAN接口EMC设计标准电路.pdfDC110V.pdfDC110V接口EMC设计标准电路.pdfDC12V 接口EMC设计标准电路.pdfDC24V.pdfDC24V接口EMC设计标准电路.pdfDC48V EMC设计标准电路.pdfDC48V.pdfDisplaportEMC设计标准电路.pdfDVI EMC设计标准电路.pdfDVI接口.pdfHDMI接口EMC设计标准电路.pdfLED EMC设计方案20091221.pdfLVDS接口.pdfLVDS接口EMC设计标准电路.pdfP-SCAN接口EMC设计标准电路.pdfPOE EMC 设计标准电路.pdfPOE 防雷模块.pdfPROFIBUS接口EMC设计标准电路.pdfprofibus接口标准设计电路(静电).pdfPS2接口EMC设计标准电路.pdfRJ11接口EMC设计标准电路.pdfRS232.pdfRS232接口EMC设计标准电路.pdfRS485.pdfRS485EMC标准设计电路.pdfS-VIDEO.pdfSCART接口EMC设计标准电路.pdfS_VIDEO接口EMC设计标准电路.pdfUSB DeviceEMC设计标准电路.pdfUSB HOST接口EMC设计标准电路.pdfUSB2.0.pdfUSB2.0接口EMC设计标准电路.pdfUSB3.0.pdfUSB3.0接口EMC设计标准电路.pdfVGA.pdfVGAEMC设计标准电路.pdfVGA接口EMC设计标准电路.pdf以太网EMC设计标准电路.pdf以太网EMC(浪涌)设计标准电路.pdf以太网POE供电EMC设计标准电路.pdf千兆网口.pdf千兆网口EMC设计标准电路.pdf千兆网口poe.pdf基站-48V接口EMC设计标准电路.pdf复合视频接口EMC设计标准电路.pdf安防视频口(DVR)EMC设计标准电路.pdf室内外馈EMC设计标准电路.pdf差分时钟.pdf差分时钟EMC设计标准电路.pdf无源晶振.pdf无源晶振EMC设计标准电路.pdf有源晶振.pdf有源晶振EMC设计标准电路.pdf汽车电源.pdf汽车零部件电源口EMC设计标准电路.pdf电流采样EMC设计电路.pdf百兆以太 网口EMC设计标准电路(中心抽头).pdf百兆以太 网口EMC设计标准电路.pdf百兆网口.pdf耳机口.pdf耳机接口EMC设计标准电路.pdf

易我数据传输 v11.8.0.0免费版

为您提供易我数据传输下载,易我数据传输是一款的电脑传输软件,在电脑间迁移数据、应用和帐户,将旧电脑上的文件转移到新的Windows 10电脑,兼容Windows 10/8.1/8/7/Vista/XP,很轻松的将包括应用、图片、文稿、用户账号和设置在内的数据从一台旧电脑拷贝到另一台新电脑上!功能介绍  转移您的数据并使用新的电脑  如果您换了新电脑,有一些东西,尤其是应用程序和大文件需要从旧电脑移动到新电脑,易我数据传

上一篇: 代码随想录算法训练营第十六天| ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数
下一篇: 代码随想录算法训练营第十八天|● 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值