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

一、110.平衡二叉树

题目链接:https://leetcode.cn/problems/balanced-binary-tree/
文章讲解:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html
视频讲解:https://www.bilibili.com/video/BV1Ug411S7my

1.1 初见思路

  1. 采用后序遍历:左右中。获取左右节点的高度,然后回到中节点判断左右子树的高度差是否<1
  2. 求树的高度。

1.2 具体实现

class Solution {
    public boolean isBalanced(TreeNode root) {
        return getHeight(root)!=-1;
    }
    int getHeight(TreeNode node){
        if(node==null){
            return 0;
        }
        int leftH = getHeight(node.left);
        int rightH = getHeight(node.right);
        if(leftH==-1 || rightH==-1){
            return -1;
        }
        if(Math.abs(leftH-rightH)<=1){
            return Math.max(leftH,rightH)+1;
        }else{
            return -1;
        }
    }
    
}

1.3 重难点

二、 257. 二叉树的所有路径

题目链接:https://leetcode.cn/problems/binary-tree-paths/
文章讲解: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
视频讲解:https://www.bilibili.com/video/BV1ZG411G7Dh

2.1 初见思路

  1. 前序遍历:中左右。中节点先把当前节点值加入到value中,然后判断其左右子节点是否为null,如果为null,说明到了叶子节点,把当前字符串加入到结果集中。不为null,就继续向下进行递归

2.2 具体实现

class Solution {
    List<String> list = new ArrayList<String>();
    public List<String> binaryTreePaths(TreeNode root) {
       String str = "";
       
       getPath(root,str);
       
       return list;
    }

    void getPath(TreeNode node,String str){
        if(node==null){
            return;
        }
        
        if(node.left==null && node.right==null){
            list.add(str+node.val);
        }
        str+=node.val+"->";
        getPath(node.left,str);
        getPath(node.right,str);

    }
    
}

2.3 重难点

三、 404.左叶子之和

题目链接:https://leetcode.cn/problems/sum-of-left-leaves/
文章讲解: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
视频讲解:https://www.bilibili.com/video/BV1ZG411G7Dh

3.1 初见思路

  1. 是左叶子节点,不是所有左节点!!
  2. 前序遍历:中左右。
  3. 中节点的处理逻辑,取左节点的值加到总和中,

3.2 具体实现

class Solution {
    int sum=0;
    public int sumOfLeftLeaves(TreeNode root) {
        if(root==null){
            return sum;
        }
        getSum(root);
        return sum;
    }
    void getSum(TreeNode node){
        if(node==null){
            return;
        }
        if(node.left!=null && node.left.left==null && node.left.right==null){
            sum+=node.left.val;
        }
        getSum(node.left);
        getSum(node.right);
    }
    
}

3.3 重难点

四、 222.完全二叉树的节点个数

题目链接:https://leetcode.cn/problems/count-complete-tree-nodes/
文章讲解: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://www.bilibili.com/video/BV1eW4y1B7pD

4.1 初见思路

  1. 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2(h) 个节点。
  2. 使用普通的二叉树来实现,用递归来实现就很简单了
  3. 如何使用完全二叉树的特性呢?还是得看视频

4.2 具体实现

class Solution {
    /**
     * 针对完全二叉树的解法
     *
     * 满二叉树的结点数为:2^depth - 1
     */
    public int countNodes(TreeNode root) {
        if (root == null) return 0;
        TreeNode left = root.left;
        TreeNode right = root.right;
        int leftDepth = 0, rightDepth = 0; // 这里初始为0是有目的的,为了下面求指数方便
        while (left != null) {  // 求左子树深度
            left = left.left;
            leftDepth++;
        }
        while (right != null) { // 求右子树深度
            right = right.right;
            rightDepth++;
        }
        if (leftDepth == rightDepth) {
            return (2 << leftDepth) - 1; // 注意(2<<1) 相当于2^2,所以leftDepth初始为0
        }
        return countNodes(root.left) + countNodes(root.right) + 1;
    }
}

4.3 重难点

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/728602.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React中的JSX应该怎么用

什么是JSX JSX Javascript XML&#xff0c;JSX是一个 JavaScript 的语法扩展。 JSX可以很好地描述 UI 应该呈现出它应有交互的本质形式并且其完全可以和JavaScript融合在一起使用。而且具有 JavaScript 的全部功能。JSX 可以生成 React “元素”。 JSX代码示例&#xff1a; …

编译原理:语法分析(语法制导翻译)、语义分析(类型检查、中间代码生成)

编译器在做语法分析的过程中&#xff0c;除了回答程序代码的语法是否合法&#xff08;LL,LR能否接收&#xff09;外&#xff0c;还需要完成后续的工作&#xff08;包括构建语法树、类型检查、中间代码生成、目标代码生成&#xff09;&#xff0c;这些后续工作一般都可以通过语法…

板凳--------第60章 SOCKET:服务器设计

60.1 迭代型和并发型服务器 1016 1.迭代型&#xff1a; 服务器每次只处理一个客户端&#xff0c;只有当完全处理完一个客户端的请求后才会去处理下一个客户端。只适用于快速处理客户端请求的场景&#xff0c;因为每个客户端都必须等待&#xff0c;直到前面所有的客户端都处理完…

10年265倍!动态展示全球第一股英伟达10年股价走势

英伟达在过去十年的股价走势展示了其在市场上的强劲表现和显著增长。自1999年上市以来&#xff0c;英伟达的股价经历了多次显著的涨幅&#xff0c;并在2024年达到了历史新高。 从2023年6月的数据来看&#xff0c;英伟达的股价为386.54美元/股&#xff0c;市值为9548亿美元。然…

redis以后台的方式启动

文章目录 1、查看redis安装的目录2、Redis以后台的方式启动3、通过客户端连接redis4、连接后&#xff0c;测试与redis的连通性 1、查看redis安装的目录 [rootlocalhost ~]# cd /usr/local/redis/ [rootlocalhost redis]# ll 总用量 112 drwxr-xr-x. 2 root root 150 12月 6…

Excel中插入的图片在不同电脑上消失的问题及解决方法

在使用Excel时插入图片&#xff0c;然后在不同电脑上打开却发现图片消失并被替换为链接地址&#xff0c;这个问题通常出现于文件中的图片路径没有正确保存或者电脑上缺少相关的图片文件。下面让我们来详细解释这个问题以及可能的解决方法。 ### 问题原因分析1. **相对路径问题…

数据结构—排序、查找、图论和字符串算法之Java实例

一&#xff1a;引言 在编程的海洋中&#xff0c;算法是程序员的灵魂之光。它们不仅指引着代码的前进方向&#xff0c;更能解决难题&#xff0c;提升效率。虽然各式各样的算法琳琅满目&#xff0c;但其中有一些却是每位程序员必定会遇到且应当深刻掌握的。本文将带您走进这些至…

从零开始学WEB前端——HTML理论讲解

有同学可能就会问&#xff1a;为什么我的创建的记事本文件名字叫“新建文本文档”而不是“新建文本文档.txt”呢&#xff1f; 这是因为.txt是后缀名&#xff0c;表示的是打开方式&#xff0c;就比如.docx后缀的都是默认用word打开&#xff0c;.xlsx的都是默认用excel打开。 常…

Linux ls-al命令实现,tree命令实现,不带缓存的文件IO(open,read,write)

shell命令 ls -al 实现 #include <43func.h> void error_check(int ret, const char *msg) {if (ret -1) {perror(msg);exit(EXIT_FAILURE);} }char get_file_type(mode_t mode) {if (S_ISREG(mode)) return -;//检查给定的文件模式&#xff08;通常是从 stat 或 lst…

【vite】define 全局常量定义

&#x1f9ed; define 说明 类型&#xff1a; Record<string, any> 定义全局常量替换方式。其中每项在开发环境下会被定义在全局&#xff0c;而在构建时被静态替换。 Vite 使用 esbuild define 来进行替换&#xff0c;因此值的表达式必须是一个包含 JSON 可序列化值&a…

WebHttpServletRequestResponse(完整知识点汇总)

额外知识点 Web核心 Web 全球广域网&#xff0c;也成为万维网&#xff08;www&#xff09;&#xff0c;可通过浏览器访问的网站 JavaWeb 使用Java技术来解决相关Web互联网领域的技术栈 JavaWeb技术栈 B/S架构&#xff1a;Browser/Server&#xff0c;即浏览器/服务器 架构模式…

海康威视-下载的录像视频浏览器播放问题

目录 1、播放异常比对 2、视频编码检查 2.1、正常视频解析 2.2、海康视频解析 2.3、比对工具 3、转码 3.1、maven依赖 3.2、实现代码 4、验证 在前面的文章&#xff08;海康威视-按时间下载录像文件_海康威视 sdk 下载录像 大小0-CSDN博客&#xff09;中&#xff0c;通…

.NET+Python量化【1】——环境部署和个人资金账户信息查询

前言&#xff1a;量化资料很少&#xff0c;.NET更少。那我就来开个先河吧~ 以下是使用QMT进行量化开发的环境部署和基础信息获取有关操作。 1、首先自己申请券商的QMT权限&#xff0c;此步骤省略。 2、登陆QMT&#xff0c;选择极简模式&#xff0c;或者独立交易模式之类的。会进…

C语言 | Leetcode C语言题解之第171题Excel表列序号

题目&#xff1a; 题解&#xff1a; int titleToNumber(char* columnTitle) {int number 0;long multiple 1;for (int i strlen(columnTitle) - 1; i > 0; i--) {int k columnTitle[i] - A 1;number k * multiple;multiple * 26;}return number; }

【Mybatis-plus】查询及更新为null或空字符串

前言 查询为 null 或者 空字符串时&#xff0c;可以使用 or() 关键字。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 查询 使用 LambdaQueryWrapper 查询 parentCode 为 null 或者 空字符串 的数据。 LambdaQueryWrapper<CompanyEntity> qu…

go 1.22 增强 http.ServerMux 路由能力

之前 server func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Println("Received request:", r.URL.Path)fmt.Fprintf(w, "Hello, client! You requested: %s\n", r.URL.Path)})log.Println("Serv…

Gone——golang依赖注入框架介绍

文章目录 Gone是什么特性小试牛刀概念与启动流程人话版本鬼话版本代码版本 关于Logo Gone是什么 首先&#xff0c;Gone是Golang的一个轻量级的依赖注入框架&#xff0c;目前依赖注入的装配流程是通过反射来实现的&#xff1b;虽然golang的反射一直被人诟病太慢&#xff0c;但是…

RK3568平台(音频篇)音频ALSA框架

一.ALSA框架简介 ALSA表示先进linux声音架构&#xff08;Advanced Linux Sound Archiecture&#xff09;&#xff0c;它由一系列的内核驱动、应用程序编程接口&#xff08;API&#xff09;以及支持linux下声音的应用程序组成、 ALSA项目发起的原有是linux下的声卡驱动&#x…

【论文笔记】LoRA LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

题目&#xff1a;LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 来源: ICLR 2022 模型名称: LoRA 论文链接: https://arxiv.org/abs/2106.09685 项目链接: https://github.com/microsoft/LoRA 文章目录 摘要引言问题定义现有方法的问题方法将 LORA 应用于 Transformer 实…

双写一致性

双写一致性 当修改了数据库的数据也要同时更新缓存的数据&#xff0c;缓存和数据库的数据要保持一致。 注意这里是对数据库进行写操作而不是读操作&#xff0c;通常我们有两种方式完成这个写操作&#xff0c;分别是&#xff1a;先删除缓存再修改数据库 和 先修改数据库再删除…