LeetCode刷题笔记之二叉树(二)

一、二叉树的翻转

1. 226【翻转二叉树】

  • 题目: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
  • 代码:
class Solution {public TreeNode invertTree(TreeNode root) {//翻转二叉树,实际上就是交换左右结点//使用递归来交换,根左右if(root == null) return null;swapChildren(root);invertTree(root.left);invertTree(root.right);return root;}public void swapChildren(TreeNode root){TreeNode temp = root.right;root.right = root.left;root.left = temp;}
}

二、对称二叉树

1. 101 【对称二叉树】

  • 题目: 给你一个二叉树的根节点 root , 检查它是否轴对称。
  • 代码:
class Solution {public boolean isSymmetric(TreeNode root) {//对称二叉树,对称的是根的左右子树//不能完全遍历左右子树之后比较遍历结果,因为不能区分左结点或右结点为空的情况//左子树通过根左右的方式遍历//右子树通过根右左的方式遍历//若左右子树遍历的结果相同,则是对称二叉树TreeNode left = root.left;TreeNode right = root.right;return inorder(left,right);}public boolean inorder(TreeNode left,TreeNode right){if(left==null && right!=null) return false;if(left!=null && right==null) return false;if(left==null && right==null) return true;if(left.val != right.val) return false;//前序遍历boolean f1 = inorder(left.left,right.right);boolean f2 = inorder(left.right,right.left);return f1&&f2;}
}

2. 100【相同的树】

  • 题目: 给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
  • 代码:
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {//递归遍历两棵树,比较每个相应结点的值是否相等if(p==null && q!=null) return false;if(p!=null && q==null) return false;if(p==null && q==null) return true;if(p.val != q.val) return false;boolean f1 = isSameTree(p.left,q.left);boolean f2 = isSameTree(p.right,q.right);return f1&&f2;}
}

三、二叉树的深度

1. 104【二叉树的最大深度】

  • 题目: 给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
  • 代码:
class Solution {public int maxDepth(TreeNode root) {//求二叉树的深度本质上是遍历二叉树//上一篇有记录使用层序遍历求二叉树的深度//这里使用后序遍历求二叉树的深度if(root == null) return 0;int leftDepth = maxDepth(root.left);int rightDepth = maxDepth(root.right);return 1+Math.max(leftDepth,rightDepth);}
}

2. 559【n叉树的最大深度】

  • 题目: 给定一个 n 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
  • 代码:
class Solution {public int maxDepth(Node root) {//这里同样用后序遍历来求解if(root == null) return 0;int max = 0;List<Node> childNode = root.children;for(Node n:childNode){max = Math.max(max, maxDepth(n));}return 1+max;}
}

3. 111【二叉树的最小深度】

  • 题目: 给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
  • 代码:
class Solution {public int minDepth(TreeNode root) {//注意最小深度是根到叶子结点的最短距离,//因此不能使用min(leftDepth,rightDepth),这样求得的不一定是到叶子结点的距离if (root == null) return 0;int leftDepth = minDepth(root.left);int rightDepth = minDepth(root.right);if (root.left != null && root.right == null) {return 1 + leftDepth;}if (root.left == null && root.right != null) {return 1 + rightDepth;} else {return 1 + Math.min(leftDepth, rightDepth);}}
}

4. 222【完全二叉树的节点个数】

  • 题目: 给你一棵完全二叉树的根节点 root ,求出该树的节点个数。
    完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1 − 2 h 1 - 2^h 12h 个节点。
  • 代码:
class Solution {public int countNodes(TreeNode root) {//将完全二叉树划分为多个满二叉树,求每个满二叉树的节点个数//完全二叉树如果最左边的节点个数==最右边节点个数,则是一个满二叉树//满二叉树的节点个数=2^n-1,n是树的深度if(root == null) return 0;int leftNum =0;int rightNum = 0;TreeNode tempNode = root;while(tempNode.left != null){leftNum++;tempNode = tempNode.left;}tempNode = root;while (tempNode.right != null){rightNum++;tempNode = tempNode.right;}if(leftNum == rightNum){return (2<<rightNum)-1;}else{int leftDepth = countNodes(root.left);int rightDepth = countNodes(root.right);return leftDepth+rightDepth+1;}}
}

5. 110【平衡二叉树】

  • 题目: 给定一个二叉树,判断它是否是高度平衡的二叉树。
  • 代码:
class Solution {public int getHeight(TreeNode node){//该题不可以简单的使用最大深度-最小深度<=1来判断//如果一棵树只有一条路径,则最大深度-最小深度=0<1//但它不一定是平衡的if(node == null) return 0;int leftHeight = getHeight(node.left);int rightHeight = getHeight(node.right);if(leftHeight==-1 || rightHeight==-1){return -1;}//左右子树高度相差1或0都可以if(Math.abs(leftHeight-rightHeight) > 1){return -1;}return 1+Math.max(leftHeight,rightHeight);}public boolean isBalanced(TreeNode root) {//平衡二叉树:每个节点的左右子树高度差的绝对值不超过1//计算左右子树的高度,然后计算高度差的绝对值是否为1if(getHeight(root)!=-1){return true;} else {return false;}}
}

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

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

相关文章

CMake的简单使用

一、一个最简单的CMake项目 在Ubuntu上使用CMake构建一个最简单的项目。 1. 安装CMake 首先安装CMake&#xff0c;这里使用的是Ubuntu系统。 sudo apt-get install cmake2. 编写源程序 编写代码&#xff0c;新建文件main.c。 // main.c #include "stdio.h"int …

Java学习笔记2024/2/20

今日作业&#xff1a; 题目1 完成课堂上所有练习 package test.test1; ​ import java.util.Random; ​ public class Test3 { ​public static void main(String[] args) {//键盘输入任意字符串&#xff0c;打乱里面的内容 ​//1.键盘输入任意字符串String str "abcd…

安卓adb调试备忘录

由于 MAC 的 USB 口全被占用着&#xff0c;采用无线连接刚方便&#xff0c;记录一下&#xff0c;以防忘记~ ADB原理 adb devices -l ## 列出连接的设备adb tcpip [端口号] adb tcpip 6666 # 将当前已连接USB上的Mobile端切换为TCP/IP模式&#xff0c;以6666端口进行监听. adb…

你真的了解—————NumPy吗

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;opencv &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于IT的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到小田代码世界~ &#x1f601; 喜欢的…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(8)模型训练

好吧&#xff0c;搞了半天&#xff0c;都是围绕数据在干活&#xff0c;这也就验证了&#xff0c;我们说的&#xff0c;数据准备等工作&#xff0c;要占到机器学习项目一半以上的工作量和时间。而且数据决定了模型的天花板&#xff0c;算法只是去达到上限。 我们今天来学习模型…

Java实现Redis延时队列

“如何实现Redis延时队列”这个面试题应该也是比较常见的&#xff0c;解答如下&#xff1a; 使用sortedset&#xff08;有序集合&#xff09; &#xff0c;拿时间戳作为 score &#xff0c;消息内容作为key 调用 zadd 来生产消息&#xff0c;消费者用zrangebyscore 指令获取 N …

暴力枚举刷题2

题目来源&#xff1a;烤鸡 - 洛谷 参考书目&#xff1a;参考书籍&#xff1a;《深入浅出程序设计竞赛&#xff08;基础篇&#xff09;》 解题思路&#xff1a;这道题可以用暴力枚举的方法解决&#xff0c;用10层for循环&#xff0c;再if判断就能找到所有符合的情况。因为 n 的…

2、windows环境下vscode开发c/c++环境配置(一)

前言&#xff1a;VSCode是微软出的一款轻量级编辑器&#xff0c;它本身只是一款文本编辑器而已&#xff0c;并不是一个集成开发环境(IDE)&#xff0c;几乎所有功能都是以插件扩展的形式所存在的。因此&#xff0c;我们想用它编程&#xff0c;不只是把vscode下载下来就行&#x…

数据分析 — 电商用户分析和用户 RFM 模型

目录 一、电商用户分析1、数据字段信息2、数据读取3、数据清洗4、可视化分析1、每年销售额的增长情况2、各个地区分店的销售额3、每个分店每一年的销售额4、销售淡旺季5、新增用户 二、RFM 模型1、RFM 模型的三个维度2、RFM 的客户类型标签3、RFM 模型的二分法思想4、代码 一、…

【C#小知识】c#中的delegate(委托)和event(事件)

今天来介绍一下delegate和event。delegate在c#中可以定义一个函数类型&#xff0c;可以将函数作为一个对象来使用。event在c#中则可以看做一个函数的集合&#xff0c;event中包含了一个或多个函数。 delegate using System;public class MyClass {//定义委托public delegate v…

计网day6

七 应用层 7.1 网络应用模型 7.2 DNS系统 7.3 文件传输协议FTP 7.4 电子邮件 7.5 万维网和HTTP协议

细数高德地图的发展史

根据2023年自然资源部公布的名单显示&#xff0c;以下公司通过“地图甲级测绘资质”换证审核&#xff0c;也就意味着&#xff0c;以下这些公司可以继续从事电子地图的采集和制作、商业合作等相关业务。 而这一点&#xff0c;对于以电子地图导航为主要业务支撑的企业至关重要。…

Sql Server 视图

USE [数据库名称] GO /****** Object: View [dbo].[视图名称] Script Date: 2024/2/19 10:08:13 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE VIEW [dbo].[视图名称&#xff1a;V_XXXXX] AS SELECT FILED1, FILED2, FILED3, FILED4 FROM dbo.表名…

【编程题】跳石板

跳石板 分析后可知 要在众多解中寻找最优解 因此用动态规划 比如&#xff1a; 4-6只需跳一步&#xff0c;而6-8也只需一步&#xff0c;因此在刚才跳了一步的基础上再加1 8到10一步&#xff0c;8到12一步&#xff0c;9到12一步&#xff0c;8-10-12两步&#xff0c;因此到12位置…

Hash哈希

当需要快速查询数据的记录时&#xff1a; 手动按某规则为数据建立索引&#xff0c;利用数组维护数据若1中需要开大数组爆内存&#xff0c;利用官方库的Hash集合&#xff0c;可以将最好情况下的时间复杂度优化到O(1)避免T和M。 1. LC 2036 最大好子数组和 VP双周赛123T3。一开…

新增长100人研讨会:快消零售专场探讨招商加盟数字化转型实战

2024年2月2日下午&#xff0c;一场由纷享销客与杨国福集团联合主办的招商加盟数字化转型研讨会在上海成功举办。本次研讨会汇聚了众多快消零售业界的领军人物&#xff0c;共同探讨行业未来的新增长点。 会议伊始&#xff0c;杨国福集团数字化中心负责人王林林发表了主题演讲&a…

Redis-面试题

一、基础 1、什么是Redis C语言编写,基于key-value存储的nosql开源内存数据库内存存储、数据结构优化,高性能一般用于应用和数据库之间的分布式缓存中间件提供主从复制+哨兵、集群的方式实现高可用,在redis集群中通过hash槽的方式实现数据分片,进一步提升性能和可扩展性2、…

使用Nginx或者Fiddler快速代理调试

1 背景问题 在分析业务系统程序问题时,存在服务系统环境是其它部门或者其它小组搭建或运维的,并且现在微服务时代,服务多且复杂,在个人机器上搭建起如此环境,要么费事费力,要么不具备充足条件。 急需有一种方法或者工具可以快速辅助调试定位分析问题。本文下面介绍代理方…

算法-递归

题目&#xff1a;打印中序遍历指定节点的后续节点 思路&#xff1a;两种情况当前节点右子树是否为null&#xff0c;如果不是返回右子树最左非空子节点&#xff0c;否则往上找&#xff0c;直到父节点为空或者当前节点是父节点的左子树&#xff0c;返回父节点 public class Code…

LeetCode面试题 17.24. Max Submatrix LCCI——压缩数组+动态规划

文章目录 一、题目二、题解 一、题目 Given an NxM matrix of positive and negative integers, write code to find the submatrix with the largest possible sum. Return an array [r1, c1, r2, c2], where r1, c1 are the row number and the column number of the subma…