力扣-Hot100-二叉树其一【算法学习day.32】

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.二叉树的直径

题目链接:543. 二叉树的直径 - 力扣(LeetCode)

题面:

基本分析:用recursion(i)表示i节点的最长子链长

代码:

/**
 * 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 {
    int ans = 0;
    public int diameterOfBinaryTree(TreeNode root) {
      recursion(root);
      return ans;
    }
    public int recursion(TreeNode root){
      if(root==null)return -1;
      int left = recursion(root.left)+1;
      int right = recursion(root.right)+1;
      ans = Math.max(ans,left+right);
      return Math.max(left,right);
    }
    
}

2.二叉树的层序遍历

题目链接:102. 二叉树的层序遍历 - 力扣(LeetCode)

题面:

基本分析:使用队列实现bfs

代码:

/**
 * 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 {
    List<List<Integer>> ans = new ArrayList<>();
    public List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue = new ArrayDeque<>();
        Queue<TreeNode> queue2 = new ArrayDeque<>();
        if(root==null)return ans;
        int flag = 0;
        queue.offer(root);
        while(true){
        List<Integer> list = new ArrayList<>();
          if(flag%2==0){
          if(queue.isEmpty())break;
          while(!queue.isEmpty()){
          TreeNode node =  queue.poll();
          list.add(node.val);
          if(node.left!=null)queue2.offer(node.left);
          if(node.right!=null)queue2.offer(node.right);
         }
         }

         else{
          if(queue2.isEmpty())break;
          while(!queue2.isEmpty()){
          TreeNode node = queue2.poll();
          list.add(node.val);
           if(node.left!=null)queue.offer(node.left);
          if(node.right!=null)queue.offer(node.right);
        }
         }
         ans.add(list);
         flag++;
        }
        return ans;
    }
}

3.二叉搜索树中第K小的元素

题目链接:230. 二叉搜索树中第 K 小的元素 - 力扣(LeetCode)

题面:

基本分析:中序遍历 

代码:

/**
 * 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 {
    int[] arr = new int[10005];
    int count = 0;
    public int kthSmallest(TreeNode root, int k) {
        recursion(root);
        return arr[k-1];
    }
    public void recursion(TreeNode root){
       if(root==null)return;
       recursion(root.left);
       arr[count++] = root.val;
       recursion(root.right);
    }
}

4.二叉树的右视图

题目链接:199. 二叉树的右视图 - 力扣(LeetCode)

题面:

基本分析:使用bfs存队列,每次结束后的队列头就是该层的最右边元素

代码:

/**
 * 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 {
     List<Integer> ans = new ArrayList<>();
    public List<Integer> rightSideView(TreeNode root) {
        if(root==null)return ans;
     Queue<TreeNode> queue = new ArrayDeque<>();
     Queue<TreeNode> queue2 = new ArrayDeque<>();
     queue.offer(root);
     int flag = 0;
     while(true){
        if(flag%2==0){
            if(queue.isEmpty())break;
          TreeNode right= queue.peek();
            ans.add(right.val);
            while(!queue.isEmpty()){
               TreeNode node =  queue.poll();
               if(node.right!=null)queue2.offer(node.right);
               if(node.left!=null)queue2.offer(node.left);
            }
        }else{
            if(queue2.isEmpty())break;
            TreeNode right= queue2.peek();
            ans.add(right.val);
            while(!queue2.isEmpty()){
               TreeNode node =  queue2.poll();
               if(node.right!=null)queue.offer(node.right);
               if(node.left!=null)queue.offer(node.left);
            }

        }
        flag++;
     }
     return ans;
    }
}

5.二叉树展开为链表

题目链接:114. 二叉树展开为链表 - 力扣(LeetCode)

题面:

吐槽:这题被Java的引用闹麻了 ,贴上大佬代码

代码:

class Solution {
    public void flatten(TreeNode root) {
        if(root == null){
            return ;
        }
        //将根节点的左子树变成链表
        flatten(root.left);
        //将根节点的右子树变成链表
        flatten(root.right);
        TreeNode temp = root.right;
        //把树的右边换成左边的链表
        root.right = root.left;
        //记得要将左边置空
        root.left = null;
        //找到树的最右边的节点
        while(root.right != null) root = root.right;
        //把右边的链表接到刚才树的最右边的节点
        root.right = temp;
    }
}

后言

上面是力扣Hot100的二叉树专题,下一篇是该专题的其他题目,希望有所帮助,一同进步,共勉!

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

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

相关文章

京东商品详情,Python爬虫的“闪电战”

在这个数字化的时代&#xff0c;我们每天都在和数据打交道&#xff0c;尤其是电商数据。想象一下&#xff0c;你是一名侦探&#xff0c;需要快速获取京东上某个商品的详细信息&#xff0c;但是没有超能力&#xff0c;怎么办&#xff1f;别担心&#xff0c;Python爬虫来帮忙&…

深度学习推荐系统的工程实现

参考自《深度学习推荐系统》——王喆&#xff0c;用于学习和记录。 介绍 之前章节主要从理论和算法层面介绍了推荐系统的关键思想。但算法和模型终究只是“好酒”&#xff0c;还需要用合适的“容器”盛载才能呈现出最好的味道&#xff0c;这里的“容器”指的就是实现推荐系统…

「QT」高阶篇 之 d-指针 的用法

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案

在当今快速发展的农业领域&#xff0c;智慧农业已成为推动农业现代化、助力乡村全面振兴的新手段和新动能。随着信息技术的持续进步和城市化进程的加快&#xff0c;智慧农业对于监控安全和智能管理的需求日益增长。 视频设备轨迹回放平台EasyCVR作为智慧农业视频远程监控管理方…

计算机视觉空域处理完整版——超详细图文解

空域处理 图像空域处理 a.线性滤波b.非线性滤波c.二值图像处理方法 数学形态学连通成分标记 “点运算”是在不改变图像大小、几何形状以及局部结构的情况下&#xff0c;对像素值进行修改&#xff0c;新图像的像素值只与 原图像同一位置的像素值有关。 灰度级变换(线性变换,非…

Python学习------第八天

函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用&#xff1a; 函数的局部变量和全局变量 局部变量的作用&#xff1a;在函数体内部&#xff0c;临时保存数据&#xff0c;即当函数调用完成后&#xff0c;则销毁局部变量。 money 5000000 n…

Matlab实现麻雀优化算法优化随机森林算法模型 (SSA-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 麻雀优化算法&#xff08;Sparrow Search Algorithm, SSA&#xff09;是一种基于自然界中麻雀觅食和躲避天敌行为的新型群智能优化算法。SSA通过模拟麻雀群体中个体之间的信息交流和社会互动来指导搜索过程&…

51c嵌入式~单片机合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、不同的电平信号的MCU怎么通信&#xff1f; 下面这个“电平转换”电路&#xff0c;理解后令人心情愉快。电路设计其实也可以很有趣。 先说一说这个电路的用途&#xff1a;当两个MCU在不同的工作电压下工作&…

web实验3:虚拟主机基于不同端口、目录、IP、域名访问不同页面

创建配置文件&#xff1a; 创建那几个目录及文件&#xff0c;并且写内容&#xff1a; 为网卡ens160添加一个 IPv4 地址192.168.234.199/24: 再重新激活一下网卡ens160&#xff1a; 关闭防火墙、改宽松模式&#xff1a; 重启服务&#xff1a; 查看nginx端口监听情况&#xff1a;…

AutoHotKey自动热键AHK-正则表达式

在这个软件的操作中,基本都是需要即时的解决一些问题,所以对字符串的操作是比较多的,所以正则的使用还是比较重要的,接下来我们用一个例子来了解正则表达式的使用 str "7654321" RegExMatch(str, "65(43)(21)", SubPat)str ( str %str% SubPat %SubPa…

越南很火的slots游戏投放Google谷歌广告策略

越南很火的slots游戏投放Google谷歌广告策略 越南的slot游戏市场正在借助Google广告代投策略推动增长。随着智能手机的普及和互联网的普及&#xff0c;越南的游戏市场迅速增长&#xff0c;吸引了越来越多的投资者和开发者进入该市场。 在这个竞争激烈的市场中&#xff0c;广告…

Mac中安装OhMyZsh

Mac中安装OhMyZsh 文章目录 Mac中安装OhMyZsh一、Homebrew二、OhMyZsh1、Oh-My-Zsh配置1.1&#xff1a;主题配置1.2&#xff1a;插件配置&#xff08;语法高亮和自动提示&#xff09;1、zsh-autosuggestions&#xff08;需下载安装&#xff09;&#xff1a;高亮显示所有支持的命…

flutter插件:录制系统播放的声音

该插件基于flutter包 flutter_screen_recording 和 github库 SystemAudioCaptureAndroid&#xff0c;实现了在安卓手机上录制系统播放声音的功能&#xff0c;也就是说&#xff0c;只要一个安卓应用没有设置不允许其它应用录制声音&#xff0c;该插件可以录制该应用播放的声音。…

【论文阅读】WaDec: Decompiling WebAssembly Using Large Language Model

论文阅读笔记:WaDec: Decompiling WebAssembly Using Large Language Model 1. 来源出处 论文标题: WaDec: Decompiling WebAssembly Using Large Language Model作者: Xinyu She, Yanjie Zhao, Haoyu Wang会议: 39th IEEE/ACM International Conference on Automated Softwar…

【安全测试】sqlmap工具(sql注入)学习

前言&#xff1a;sqimap是一个开源的渗透测试工具&#xff0c;它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。它有一个强大的检测引擎&#xff0c;许多适合于终极渗透测试的小众特性和广泛的开关&#xff0c;从数据库指纹、从数据库获 取数据到访问底层文件系…

Redis环境部署(主从模式、哨兵模式、集群模式)

一、概述 REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库…

【Excel】身份证号最后一位“X”怎么计算

大多数人身份证号最后一位都是数字&#xff0c;但有个别号码最后一位却是“X"。 如果你查百度&#xff0c;会得到如下答案&#xff1a; 当最后一位编码是10的时候&#xff0c;因为多出一位&#xff0c;所以就用X替换。 可大多数人不知道的是&#xff0c;这个10是怎么来的…

Isaac Sim+SKRL机器人并行强化学习

目录 Isaac Sim介绍 OmniIssacGymEnvs安装 SKRL安装与测试 基于UR5的机械臂Reach强化学习测评 机器人控制 OMNI GYM环境编写 SKRL运行文件 训练结果与速度对比 结果分析 运行体验与建议 Isaac Sim介绍 Isaac Sim是英伟达出的一款机器人仿真平台&#xff0c;适用于做机…

Leetcode 743 Network Delay Time

题意&#xff1a;给定n个节点的网络&#xff0c;以及节点之间传输的时间&#xff0c;求从节点k出发传输信息&#xff0c;最少需要多久&#xff0c;所有的节点都能够接收到信息 https://leetcode.com/problems/network-delay-time/description/ 题解&#xff1a;给定一个有向图…

[Android]相关属性功能的裁剪

1.将home界面的search bar 移除 /src/com/android/launcher3/graphics/LauncherPreviewRenderer.java // Add first page QSBif (FeatureFlags.QSB_ON_FIRST_SCREEN) {CellLayout firstScreen mWorkspaceScreens.get(FIRST_SCREEN_ID);View qsb mHomeElementInflater.infla…