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

news2025/1/15 23:39:40

文章目录

  • 前言
  • Leetcode 110.平衡二叉树
    • 题目讲解
    • 思路
  • Leetcode 257. 二叉树的所有路径
    • 题目讲解
    • 这道题涉及到了回溯
  • Leetcode 404.左叶子之和
    • 题目讲解
    • 总结

前言

选择一个简单的理念,矢志不渝地去执行(Take one simple idea and take it seriously

递归三部曲

  • 确定递归函数的参数和返回值
  • 确定终止条件
  • 确定单层递归的逻辑

Leetcode 110.平衡二叉树

题目讲解

思路

  • 深度 指从根节点到该节点的最长简单路径边的条数。
  • 高度 指从该节点到叶子节点的最长简单路径边的条数。

这道题主要用到高度 需要用后序算法
在这里插入图片描述

节点的左右子树的高度小于等于1

如果左右子树高度差大于一 就返回 return -1;

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isBalanced(TreeNode root) {
      return getHeight(root)!=-1;   //传回的二叉树是二叉平衡树
    }
    public 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;     //如果节点左右子树的差大于一  则是不平衡二叉树
            }
            return Math.max( leftHeight,rightHeight)+1;
    }

}

Leetcode 257. 二叉树的所有路径

题目讲解

明天需要再看一遍

这道题涉及到了回溯

题解里 讲到用了递归必然涉及到回溯
在这里插入图片描述
这里用的是前序遍历 因为中 左右 从父结点到左右两个孩子 在返回的时候就需要用到回溯减回去

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> res =new ArrayList<>();
        if( res== null)
        {
            return res;
        }
        List<Integer> paths =new ArrayList<>();
        traveler(root,paths,res);
        return res;
    }
   public void traveler(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)
    {
          traveler(root.left,paths,res);
          paths.remove(paths.size()-1);
    }
    //右边
    if(root.right!=null)
    {
         traveler(root.right,paths,res);
         paths.remove(paths.size()-1);
    }


}}

Leetcode 404.左叶子之和

题目讲解

在这里插入图片描述

nxp,java里居然没有value 只能用val

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
      if(root == null) return 0;
      int leftsum = sumOfLeftLeaves(root.left);
      int rightsum = sumOfLeftLeaves(root.right);
      int midsum =0;
      if(root.left!=null && root.left.left ==null&& root.left.right ==null)
      {
         midsum = root.left.val;
      }
      int sum = leftsum+rightsum+midsum;
      return sum;

    }
}

总结

马上打算开启 复习数据库和计网 了 今天触及到了 回溯算法 很兴奋

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Nginx】Nginx搭建高可用集群

1. KeepalivedNginx 高可用集群&#xff08;主从模式&#xff09;2. 配置高可用的准备工作3. 在两台服务器上安装keepalived4. 完成高可用配置(主从配置)5. 最终测试 1. KeepalivedNginx 高可用集群&#xff08;主从模式&#xff09; 2. 配置高可用的准备工作 需要两台服务器…

Revit如何将明细表导出为DWG格式【批量导出图纸】

一、Revit中怎样将明细表导出到DWG文件中 有时需要将Revit中生成的各种明细表导入到CAD中使用&#xff0c;但是在明细表视图中并没有导出成DWG格式的选项如图1所示&#xff0c;应该如何操作才能导出成CAD可识别文件呢&#xff1f; 方法一&#xff1a;将明细表通过导出为报表选项…

Java 核心技术卷 I 基础知识笔记(一)

Java 的基本程序设计结构 2.1 一个简单的 Java 应用程序 一个最简单的 Java 应用程序&#xff0c;它只发送一条消息到控制台窗口中&#xff1a;/*** This is the first sample program in Core Java Chapter 3* version 1.01 1997-03-22* author Gary Cornell*/ public class…

分享111个Java源码,总有一款适合您

Java源码 分享111个Java源码&#xff0c;总有一款适合您 源码下载链接&#xff1a;https://pan.baidu.com/s/1fycjYHA7y6r-IH8H7v5XKA?pwdag8l 提取码&#xff1a;ag8l 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff…

网络编程学习记录

服务端首先是确定协议版本。首先定义一个结构体 WSADATA wsadata; 这个结构体是啥呢&#xff1f; 是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。大家晓得了吧。 让我们看看这个结构体。 typedef struct WSAData {WORD wVersion; …

c++ socket之io复用模型 epoll进阶

服务器开发系列 文章目录服务器开发系列前言一、socket epoll介绍二、代码实现1. epoll client实现2. epoll server实现3. epoll client server验证总结前言 I/O复用模型&#xff1a;主要是指&#xff0c;一个线程可以同时监控多个系统IO、并且能够操作多个系统IO的一种技术模…

西瓜书第一章课后题答案(一)

1.1 针对西瓜分类分题进行讲解属性&#xff1a; 3个属性色泽&#xff1a;&#xff08;青绿&#xff0c;乌黑&#xff0c;浅白&#xff09;根蒂&#xff1a;&#xff08;蜷缩&#xff0c;硬挺&#xff0c;稍蜷&#xff09;敲声&#xff1a;&#xff08;浊响&#xff0c;清脆&…

Docker网络network详解

一、概述 Docker容器每次重启后容器ip是会发生变化的。 这也意味着如果容器间使用ip地址来进行通信的话&#xff0c;一旦有容器重启&#xff0c;重启的容器将不再能被访问到。 而Docker 网络就能够解决这个问题。 Docker 网络主要有以下两个作用&#xff1a; 容器间的互联和…

【ROS2入门】理解 ROS 2 节点

大家好&#xff0c;我是虎哥&#xff0c;从今天开始&#xff0c;我将花一段时间&#xff0c;开始将自己从ROS1切换到ROS2&#xff0c;在上一篇中&#xff0c;我们依托Turtlesim演示节点来逐步展开&#xff0c;介绍了rqt工具&#xff0c;这一章&#xff0c;我们将围绕ROS2中主要…

jvm快速入门

1.JVM介绍 1.什么是jvm Java Virtual Machine&#xff08;java二进制字节码运行环境&#xff09; 好处&#xff1a; 一次编译&#xff0c;好处运行自动内存管理&#xff0c;垃圾回收机制数组下标越界检查多态 比较JVM\JRE\JDK jvm屏蔽java代码与底层操作系统的差异 JREJVM基…

基于 java springboot+layui仓库管理系统设计和实现

基于 java springbootlayui仓库管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

基于基于jsp+mysql+Spring+mybatis的SSM汽车保险理赔管理系统设计和实现

基于基于jspmysqlSpringmybatis的SSM汽车保险理赔管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐…

12图、网络、关联矩阵

第 12 讲 图、网络、关联矩阵 Graphs&#xff0c;networks&#xff0c;incidence matrices 本讲讨论线性代数在物理系统中的应用。 图和网络 Graphs & Networks “图”就是“结点”和“边”的一个集合。 边线上的箭头代表从结点流出的正方向。 关联矩阵&#xff08;I…

独立开发变现周刊(第87期):靠写简历如何每年赚24万美元?

分享独立开发、产品变现相关内容&#xff0c;每周五发布。目录1、mall4cloud: 开源的微服务B2B2C电商商城系统2、restorePhotos&#xff1a;开源的老照片修复系统3、JSON Crack——开源、免费的JSON可视化应用程序4、靠写简历如何每年赚24万美元&#xff1f;1、mall4cloud: 开源…

干货:用户分析的六大方法论(一)

​在日常的用户分析中&#xff0c;常用的有六大分析方法论&#xff1a; 1、行为事件分析2、点击分析模型3、用户行为路径分析4、用户健康度分析5、漏斗模型6、用户画像分析 1.行为事件分析 “行为事件分析”是用户分析的第一步&#xff0c;也是用户分析的核心和基础。一般来说…

代码随想录训练营第五十九天

1.下一个更大元素II 题503 循环数组有两种方法&#xff0c;一是用同一个数组拼接成两个数组&#xff0c;实现假循环&#xff1b;二是遍历两遍&#xff0c;用求余的方法。求余的方法更简便。 class Solution { public:vector<int> nextGreaterElements(vector<int>…

虚拟化技术学习笔记9

KVM存储虚拟化配置&#xff1a; 学习目标&#xff1a; 能够通过virt-manager添加硬盘&#xff1b;能够通过virsh添加硬盘&#xff1b;能够通过xml文件添加硬盘&#xff1b;能够了解本地存储的作用&#xff1b;能够设置本地存储&#xff1b;能够了解网络存储的作用&#xff1b…

黑马程序员SSM框架教程_Spring+SpringMVC+MyBatisPlus笔记(自学用,持续更新)

Spring的实现有两种方式&#xff0c;一是配置&#xff0c;二是注解 目录Spring_day01IOC、DIBean的基本配置、实例化、生命周期Bean的基本配置bean的实例化训练中的不足1&#xff1a;bean的生命周期DI相关内容setter注入构造器注入小结自动注入集合注入Spring_day02Spring_day0…

深入理解计算机系统_程序的加载过程和运行过程

这篇博客记录编译得到可执行目标文件后&#xff0c;加载和运行的过程。 编译得到可执行目标文件后&#xff0c;就可以将“可执行目标文件”加载“运行地址”所指的内存位置&#xff0c;然后运行了。下面记录Linux虚拟内存运行的运行过程。 2.1 程序的加载过程 当在windows下双…

【Java AWT 图形界面编程】LayoutManager 布局管理器 ③ ( BorderLayout 布局 )

文章目录一、BorderLayout 布局二、BorderLayout 构造函数 API三、BorderLayout 代码示例1、BorderLayout 基本用法代码示例2、BorderLayout 区域占用代码示例3、BorderLayout 同一区域显示多个组件代码示例一、BorderLayout 布局 BorderLayout 布局 将 Container 容器 分割成 …