二叉树知识锦囊(三)

news2024/9/24 9:22:28

作者:爱塔居

专栏:数据结构​​​​​​

作者简介:大三学生,希望和大家一起进步!

目录

前言

1. 检查两棵树是否相同。 

2. 另一颗树的子树。

3. 翻转二叉树。

4. 判断一颗二叉树是否是平衡二叉树。

5. 对称二叉树。


前言

前面两章介绍了二叉树的基本概念,我们今天开始做一些题目吧。在练习的过程中,我们加深对二叉树的了解,学会二叉树的简单应用。


1. 检查两棵树是否相同。 

力扣

思路:判断两棵树是否相同,判断的是结构和val值。

1.两个都为空,相同

2.一个为空,一个不为空,不相同

3.两个都不为空,不一定相同,需要判断val值。

利用递归解题。

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
 if(p==null&q==null){
     return true;
 }
  if(p==null&&q!=null||p!=null&&q==null){
     return false;
 } 
 if(p.val!=q.val){
   return false;
 }
return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
    }
    }

 

2. 另一颗树的子树。

力扣

思路:我们利用第一道题的方法,判断二叉树是否相同。

如果两棵二叉树,有一棵是空,subRoot就不是root的子树,返回false;

如果,两棵二叉树相同,返回true;

如果两棵二叉树不相同,判断root的左子树是否和subRot相同,相同返回true;,不相同判断root的左子树与subRot是否相同。

class Solution {
    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if(root==null||subRoot==null){
            return false;
        }
if(isSameTree(root,subRoot)) return true;
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){
     return true;
 }
  if(p==null&&q!=null||p!=null&&q==null){
     return false;
 } 
 if(p.val!=q.val){
   return false;
 }
return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
    }
}

3. 翻转二叉树。
 力扣

思路:如果二叉树为空,就不用翻转了。

如果不为空,先用一个temp装root.left,将左右二叉树进行翻转。接着,通过递归翻转左子树,再翻转右子树。

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

4. 判断一颗二叉树是否是平衡二叉树。
力扣

思路是对二叉树做先序遍历,从底至顶返回子树最大高度,若判定某子树不是平衡树则 “剪枝” ,直接向上返回。

class Solution {
    public boolean isBalanced(TreeNode root) {
    return recur(root)!=-1;
    }
    public int recur(TreeNode root){
        if(root==null){
            return 0;
        }
        int left=recur(root.left);
        if(left==-1){
            return -1;
        }
        int right=recur(root.right);
        if(right==-1){
            return -1;
        }
        return Math.abs(left-right)<=1?Math.max(left,right)+1:-1;
    }
}

 5. 对称二叉树。

 力扣

思路:判断整棵树是不是轴对称,要判断这棵树的左子树和这棵树的右子树是不是对称的,那就要判断左子树的左树和右子树的右树,左子树的右数和右子树的左树。

class Solution {
    public boolean isSymmetric(TreeNode root) {
  return isSymmetricChild(root,root);
    }
    public boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree){
if(leftTree==null&&rightTree==null)return true;
if(leftTree==null||rightTree==null)return false;
return (leftTree.val==rightTree.val)&&(isSymmetricChild(leftTree.left,rightTree.right))&&(isSymmetricChild(leftTree.right,rightTree.left));
    }
  
}

 

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

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

相关文章

【Python】Python数据结构之布尔类型(bool)

目录&#xff1a;Python数据结构之布尔类型&#xff08;bool&#xff09;一、布尔说明二、判定三、布尔运算&#xff1a; and, or, not一、布尔说明 Python 中布尔值使用常量True 和 False来表示&#xff1b;注意大小写。比较运算符< > 等返回的类型就是bool类型&#…

C++虚继承,虚基表 ,菱形继承以及解决方法

目录菱形继承形成原因出现二义性变量的内存布局应对方案虚继承 vitrual解决二义性变量内存布局--虚基表感悟关于代码复用等的另一种关系-组合菱形继承形成原因 多继承&#xff0c;呈菱形状 菱形继承代码: class A { public:A() {}int _a ; }; class B :public A { public…

分享131个ASP源码,总有一款适合您

ASP源码 分享131个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 131个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/17vXlBvqeYPM5-XUlu5zaAg?pwd3zzi 提取码&#x…

【Qt】如何使用QtCreator向工程添加文件

文章目录一、导读二、盘一盘文件模板&#xff08;2-1&#xff09;添加C/C文件&#xff08;2-2&#xff09;添加Modeling文件&#xff08;2-3&#xff09;添加Qt相关文件&#xff08;2-4&#xff09;添加GLSL相关文件&#xff08;2-5&#xff09;添加其他文件三、总结一、导读 …

【JavaSE专栏3】JDK安装、IntelliJ IDEA安装、配置环境变量

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

【苹果相册推】Xcode项目,我们将其命名为mypushchat,以及调试的iOS设备

推荐内容IMESSGAE相关 作者✈️IMEAX推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容3.日历推 *** …

第二个程序——客户端ClientUI

简介 在我的上一篇文章中&#xff0c;我已经介绍了如何实现“在线聊天室”中的服务器端ServerUI&#xff0c;服务器端作为整个聊天系统的“中继系统”&#xff0c;负责转发用户的信息到聊天室&#xff0c;可以转发给聊天室中的每一个人&#xff08;即&#xff0c;群聊&#xf…

一期Go群问答-并发控制-数据竞争-错误与异常

每周更新Go技术交流群的群问答内容&#xff0c;有需要可发我Go加群讨论学习。 并发控制 waitGroup.done()不是必须写在main方法中吗? 为什么我的协程没有成功等待&#xff1f; 熊&#xff1a;如果用了wait group&#xff0c;请求就直接卡住了&#xff0c;如果只有一个gorou…

Linux C编程一站式学习笔记5

Linux C编程一站式学习笔记 chap5 深入理解函数 文章目录Linux C编程一站式学习笔记 chap5 深入理解函数一.return语句习题二.增量式开发三.递归我猜有递归可视化工具&#xff0c;一搜果真有收获习题GCD(Greatest Common Divisor) 最大公约数Fibonacci相关资源、参考资料嘶&…

在linux中安排mysql

linux安装mysql 检测当前系统中是否安装Mysql数据库 rpm -qa rpm -qa|grep mysql rpm -qa|grep mariadb没有输出就是没有安装 我的这里显示mariadb是安装了的&#xff08;会与mysql冲突&#xff09; 卸载已经安装的软件 rpm -e --nodeps 软件名称 rpm -e --nodeps mariadb-li…

什么是执行董事

一、什么是执行董事执行董事&#xff0c;是指参与经营的董事。作为法定意义上的执行董事&#xff0c;是指规模较小的有限公司在不设立董事会的情况下设立的负责公司经营管理的职务。作为上市公司意义上的执行董事&#xff0c;执行董事并没有明确的法规依据。执行董事和非执行董…

偷偷理解Java和Scala中==和equals()的区别

君霸王&#xff0c;社稷定&#xff0c;君不霸王&#xff0c;社稷不定&#x1f97d; 目录 Java总结 Scala总结 Java中和equals() ---------------------------------------------------------------------------------------------------------------------------------------…

【人工智能原理自学】卷积神经网络:图像识别实战

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文讲解卷积神经网络&#xff1a;图像识别实战&#xff0c;一起卷起来叭&#xff01; 目录一、“卷”二、LeNet-5网络一、“卷” 这节课我们来看如何把卷积运算融入到神经网络…

【青训营】Go语言的基本语法

一、 配置Go语言及其开发环境 Mac配置&#xff1a;http://t.zoukankan.com/zsy-p-6685889.html https://wenku.baidu.com/view/8aeec92b15fc700abb68a98271fe910ef12daeaf.html?wkts1673764660043&bdQuery%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AEgopathmac 二、基础语法 p…

避免用Apache Beanutils进行属性的copy。why?让我们一起一探究竟。

在实际的项目开发中&#xff0c;对象间赋值普遍存在&#xff0c;随着双十一、秒杀等电商过程愈加复杂&#xff0c;数据量也在不断攀升&#xff0c;效率问题&#xff0c;浮出水面。 问&#xff1a;如果是你来写对象间赋值的代码&#xff0c;你会怎么做&#xff1f; 答&#xf…

05 |「链表」刷题

前言 前言&#xff1a;链表面试高频题。 文章目录前言一. 基础回顾二. 高频考题1. 例题1&#xff09;题目链接&#xff08;LeetCode 206 反转链表&#xff09;2&#xff09; 算法思路3&#xff09;源码剖析4&#xff09;时间复杂度2. 习题一. 基础回顾 参考上一讲&#xff1a; …

线性代数[向量]

系列文章目录 第一章 线性代数[初等变换(一)] 第二章 线性代数[初等变换(二)] 第三章 线性代数[初等变换(三)] 第四章 线性代数[矩阵的秩] 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一.引入 二.向…

计网必会:运输层概述、网络层介绍、TCP、UDP、多路复用、多路分解

文章目录运输层概念回顾TCP 和UDP概述介绍网络层TCP UDP网络层的联系多路复用和多路分解多路复用和多路分解的中国话理解TCP的多路复用和多路分解与UDP的区别HTTP 会话Web服务器和TCPUDP的多路复用和多路分解源端口号的用处的中国话理解UDP套接字无连接运输UDP 的优势运输层概念…

【C语言进阶】指针进阶(详细版)

目录 一、字符指针 二、指针数组 三、数组指针 1、数组指针的定义 2、&数组名和数组名的区别 3、数组指针的使用 四、数组传参和指针传参 1、一维数组传参 2、一级指针传参 3、二维数组传参 4、二级指针传参 五、函数指针 1、函数指针的定义 2、函数指针的使用 六、…

如何与他人交流

上期我们讲了打破预期,顺应主体,我的别人交流,只有在不把别人当成对象(工具人),而是把对方当成主体的情况下(让别人感受到尊重),这是相互尊重的终极本质,也是唯一方法.把别人当人看.认同对方,对方也会认同你.自信从何而来自信本意为相信自己,所以自信本应该是由内而外的事物,但…