LeetCode——OJ题之二叉树【上】

 ✏️✏️✏️今天给大家分享几道二叉树OJ题!

😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流!

动动你们发财的小手,点点关注点点赞!在此谢过啦!哈哈哈!😛😛😛

✏️✏️✏️如果觉得我分享和内容还不错的话,可以给我一个小小的赞吗

清风的CSDN博客

 

目录

一、检查两棵树是否相同 

 二、另一棵树的子树

 三、翻转二叉树

四、平衡二叉树的判断

 五、对称二叉树


一、检查两棵树是否相同 

两个二叉树相同,当且仅当两个二叉树的结构完全相同,且所有对应节点的值相同。因此,可以通过搜索的方式判断两个二叉树是否相同。 

 思路:

  • 如果两个二叉树都为空,则两个二叉树相同。如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同。
  • 如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同。

  • 若不相同则两个二叉树一定不同。

  • 若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同。

  • 这是一个递归的过程,因此可以使用深度优先搜索,递归地判断两个二叉树是否相同。

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if((p==null && q!=null) || (p!=null && q==null)){
            return false;
        }
        if(p==null && q==null){
            return true;
        }
        //走到这里,p和q都不为空
        if(p.val!=q.val){
            return false;
        }
        return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
    }
}

 二、另一棵树的子树

思路:

  • 首先可以想到,如果两棵树都为空,那么直接返回false就可以了。
  • 其次可以判断,题目所给的两棵树是否相同,如果相同,也满足条件,返回true。而判断两棵树相同,又需要深度优先搜索,这里就可以利用上面那道题的判断两棵树相同的思路,进行判断。
  • 如果两棵树不相同,那么就把题目所给的子树分别和另一棵树的左子树比较,右子树比较。
  • 可以通过递归的方式去进行深度优先搜索。 
class Solution {
    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if(root==null && subRoot==null){
            return false;
        }
        if(isSameTree(root,subRoot)){
            return true;
        }
        if(root==null){
            return false;
        }
        if(isSubtree(root.left,subRoot)){
            return true;
        }
        if(isSubtree(root.right,subRoot)){
            return true;
        }
        return false;
    }
     public boolean isSameTree(TreeNode p, TreeNode q) {
        if((p==null && q!=null) || (p!=null && q==null)){
            return false;
        }
        if(p==null && q==null){
            return true;
        }
        //走到这里,p和q都不为空
        if(p.val!=q.val){
            return false;
        }
        return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
    }
}

 三、翻转二叉树

思路:

  • 从根节点开始,递归地对树进行遍历。

  • 从根的左右节点先开始翻转。翻转其实就是交换节点的引用。交换完根的左右节点之后,递归的进行翻转左子树和右子树即可。

  • 每次翻转后,先判断翻转后的节点的next域是否为null,若为null则无需进行再次翻转。也相当于是一个小小的优化。

    class Solution {
        public TreeNode invertTree(TreeNode root) {
            if(root==null){
                return null;
            }
            TreeNode tmp=root.left;
            root.left=root.right;
            root.right=tmp;
            if(root.left==null && root.right==null){
                return root;
            }
           invertTree(root.left);
           invertTree(root.right);
    
            return root;
        }
    }

    四、平衡二叉树的判断

 

思路:

  • 一棵二叉树是平衡二叉树,当且仅当其所有子树也都是平衡二叉树,因此可以使用递归的方式判断二叉树是不是平衡二叉树,递归的顺序可以是自顶向下或者自底向上。
  • 用递归的方式判断二叉树是不是平衡二叉树,其实就是左子树个右子树的高度差的绝对值是否小于等于1。
  • 那么只需要递归的判断二叉树的左右子树的高度差的绝对值是否不大于1即可。
  • 可以定义一个求高度的方法,当在递归调用这个方法的过程中,若发现左右子树的高度差大于1时,直接返回-1,则不需要在进行递归遍历,减少递归次数。
class Solution {
    public boolean isBalanced(TreeNode root) {
        if(root==null){
            return true;
        }
        return height(root)>0;

    }
    private int height(TreeNode root){
        if(root==null){
            return 0;
        }
        int leftHeight=height(root.left);
        if(leftHeight<0){
            return -1;
        }
        int rightHeight=height(root.right);
        if(leftHeight>=0 && rightHeight>=0 && Math.abs(leftHeight-rightHeight)<=1){
            return Math.max(leftHeight,rightHeight)+1;
        }else{
            return -1;
        }
    }
}

 五、对称二叉树

思路:

  • 如果一个树的左子树与右子树镜像对称,那么这个树是对称的。

  • 要判断树的左子树与右子树对称,首先一个为空一个不为空的情况,那么一定是不对称的。其次,判断左子树的根和右子树的根的值是否一样,以及左树的左和右树的右、左树的右和右树的左是否相同,利用递归的方式进行判断即可。

class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }
        return isSymmetree(root.left,root.right);

    }

    public boolean isSymmetree(TreeNode lefttree,TreeNode righttree){
        if((lefttree!=null&&righttree==null) || (lefttree==null&&righttree!=null)){
            return false;
        }
        if(lefttree==null && righttree==null){
            return true;
        }
        if(lefttree.val!=righttree.val){
            return false;
        }
        return isSymmetree(lefttree.right,righttree.left) && 
               isSymmetree(lefttree.left,righttree.right);
    }
}

 


希望各位看官读完文章后,能够有所提升。

🎉好啦,今天的分享就到这里!!

创作不易,还希望各位大佬支持一下!

👍点赞,你的认可是我创作的动力!

⭐收藏,你的青睐是我努力的方向!

✏️评论:你的意见是我进步的财富

 

 

 

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

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

相关文章

企业设备巡检的痛点和解决方案

在设备巡检过程中&#xff0c;企业常面临多种痛点。首先&#xff0c;信息管理不足是一个关键问题&#xff0c;企业往往缺乏全面、准确的设备信息记录&#xff0c;这导致巡检工作缺乏针对性和效率。其次&#xff0c;巡检流程的非标准化使得巡检结果出现不一致&#xff0c;重要的…

ssm+vue的物流配送管理系统(有报告)。Javaee项目,ssm vue前后端分离项目

演示视频&#xff1a; ssmvue的物流配送管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 项目介…

机器学习-搜索技术:从技术发展到应用实战的全面指南

在本文中&#xff0c;我们全面探讨了人工智能中搜索技术的发展&#xff0c;从基础算法如DFS和BFS&#xff0c;到高级搜索技术如CSP和优化问题的解决方案&#xff0c;进而探索了机器学习与搜索的融合&#xff0c;最后展望了未来的趋势和挑战&#xff0c;提供了对AI搜索技术深刻的…

机器学习基础之《回归与聚类算法(7)—无监督学习K-means算法》

一、什么是无监督学习 1、没有目标值—无监督学习 一家广告平台需要根据相似的人口学特征和购买习惯将美国人口分成不同的小组&#xff0c;以便不同的用户采取不同的营销策略。 Airbnb需要将自己的房屋清单分组成不同的社区&#xff0c;以便用户能更轻松地查阅这些清单&#x…

chatGPT真的会改变我们的生活吗?

先不说生活影响有多大&#xff0c;工作职场影响很大&#xff0c;现在在职场&#xff0c;随处可见Chat GPT的身影 OpenAI 开发的 ChatGPT 和类似的人工智能工具在短时间内不会取代我们的工作。但是&#xff0c;在科技、媒体等许多行业中&#xff0c;它们可以帮助员工更好、更快地…

正版软件|Soundop 专业音频编辑器,实现无缝的音频制作工作流程

关于Soundop Soundop 音频编辑器 直观而专业的音频编辑软件&#xff0c;用于录制、编辑、混合和掌握音频内容。 Soundop 是一款适用于 Windows 的专业音频编辑器&#xff0c;可在具有高级功能的直观灵活的工作区中录制、编辑和掌握音频并混音轨道。音频文件编辑器支持波形和频谱…

企业云盘:作用和特点全解析

一、什么是企业云盘&#xff1f; 企业云盘是基于云计算理念推出的企业数据网络存储和管理解决方案&#xff0c;利用互联网后台数据中心的海量计算和存储能力为企业提供数据汇总分发、存储备份和管理等服务。 简单来讲&#xff0c;企业云盘其实就是企业网盘&#xff0c;是一种为…

一则DNS被重定向导致无法获取MySQL连接处理

同事反馈xwik应用端报java exception 获取MySQL连接超时无法连接到数据库实例 经过告警日志发现访问进来的IP地址数据库端无法被解析&#xff0c;这里可以知道问题出现在Dns配置上了 通过以上报错检查/etc/resolve.conf 发现namesever 被重定向设置成了114.114.114.114 域名 …

如何用AI交互数字人打造数智文旅?

随着旅游业不断发展壮大&#xff0c;景区的功能不断扩展、业态不断延伸、硬件不断升级&#xff0c;但如何利用自身文旅资源打造差异化、数智化文旅景点&#xff0c;吸引游客与市民成为一大经营痛点。 而AI交互数字人的出现&#xff0c;可以极大地将文旅资源以可视化、具象化的…

资讯 | 图扑应邀出席“数字孪生•筑梦末来”数字工程论坛

2023"数字孪生 筑梦未来"数字工程论坛于 11 月 8 日在杭州拉开帷幕。该论坛是由中国电建集团华东勘测设计研究院有限公司发起创办全国性“工程IT”高端交流平台活动。 图扑软件作为受邀参展企业之一&#xff0c;有幸与诸位专家学者、参展客户共同领略数字化发展的成…

洗内裤的小洗衣机买啥牌子的?口碑好的迷你洗衣机推荐

迷你洗衣机是一种小型的家用洗衣设备&#xff0c;主要是由于其小巧便携而且实用性高的特点&#xff0c;非常适用于小户型家庭、单身人士、学生宿舍等场所&#xff0c;如今随着迷你洗衣机在市场上越来越受到消费者的青睐。那么&#xff0c;迷你洗衣机哪个牌子好用又不贵呢&#…

职场新人,如何提高自我管理能力?

作为职场新人&#xff0c;一定要学会个人管理。 入职三个月多&#xff0c;我总结了一个经验&#xff0c;作为职场新人&#xff0c;我越加觉得自我管理重要性。 在职场一个普遍的现象&#xff1a;在领导眼里&#xff0c;同样的问题在老职员身上不是问题&#xff0c;在新员工身…

【华为OD题库-022】阿里巴巴找黄金宝箱(IV)-java

题目 一贫如洗的椎夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0-N的子&#xff0c;每个箱子上面有一个数字&#xff0c;箱子排列成一个环&#xff0c;编号最大的箱子的下一个是编号为0的箱子。请输出每个箱子贴的数字之后的第…

冰点还原精灵Deep Freeze for mac版

Deep Freeze是一种系统恢复软件&#xff0c;它可以保护计算机系统免受恶意软件和不必要的更改。它的基本功能是在计算机重启后恢复到原始状态&#xff0c;即使用户进行了任何更改也不例外。 Deep Freeze主要用于公共场所的计算机&#xff0c;如图书馆、学校实验室和互联网咖啡馆…

卡尔曼滤波器第 2 部分 - 贝叶斯滤波器

一、说明 这是卡尔曼滤波器系列的第二部分&#xff0c;我们在概念和代码方面对卡尔曼滤波器进行了基于示例的理解。在第一部分中&#xff0c;我们对卡尔曼滤波器有了直观的理解&#xff0c;然后是基于数值的 Alpha-Beta 滤波器&#xff08;构成卡尔曼滤波器的基础&#xff09;的…

时分复用(Time Division Multiplexing, TDM)介绍(同步时分复用、异步时分复用(统计时分复用))

文章目录 时分复用技术: 原理与应用概述1. 时分复用的基本原理1.1 定义和工作方式1.2 同步与异步时分复用 2. 时分复用的技术特点2.1 优点2.2 缺点 3. 时分复用的应用3.1 电信网络3.2 数字视频广播3.3 光纤通信 4. 时分复用模拟代码参考文献总结 时分复用技术: 原理与应用 概述…

使用VC++设计程序:对于一幅256级灰度图像,求其一元熵值、二维熵值

数字图像处理–实验二B图像的一维熵与二维熵算法 本文主要是对图像进行一维熵以及二维熵的计算&#xff0c;下面附有实现的代码 文章目录 数字图像处理--实验二B图像的一维熵与二维熵算法一、 实验内容二、 一维熵1. 一维熵的定义2. 一维熵的C代码实现 三、 二维熵1. 二维熵的定…

seatunnel及web安装常见问题与解决方法

mvn加速下载seatunnel相关jar包 安装seatunnel过程中&#xff0c;解压文件后官方默认提供的connector的jar包只有2个&#xff0c;要想连接mysql&#xff0c;oracle&#xff0c;SqlServer&#xff0c;hive&#xff0c;kafka&#xff0c;clickhouse&#xff0c;doris等时&#x…

Hive 查询优化

Hive 查询优化 -- 本地 set mapreduce.framework.namelocal; set hive.exec.mode.local.autotrue; set mapperd.job.trackerlocal; -- yarn set mapreduce.framework.nameyarn; set hive.exec.mode.local.autofalse; set mapperd.job.trackeryarn-- 向量模式 set hive.vectori…