双非本科准备秋招(16.1)—— 力扣二叉树

1、101. 对称二叉树

        检查是否对称,其实就是检查左节点等不等于右节点,我们可以用递归来做。

        如果左右节点都为null,说明肯定对称呀,返回true。

        如果一个为null一个不为null,或者左右的值不相等,则为false。(这里简化一下,比如

left==null&&right!=null可以只写left==null,因为如果都为null,会进入第一个if)。

        如果两个值相等,不代表一定对称,还需要继续检查左节点的左节点和右节点的右节点、左节点的右节点和右节点的左节点是否相等。

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

2、104. 二叉树的最大深度

递归解法

要求这棵树的最大深度,我们只需要求左子树和右子树的深度,然后取最大值加一就好,同样地对每个节点都如此,于是就可以用递归来解。

class Solution {public int maxDepth(TreeNode root) {if(root == null){return 0;}if(root.left == null && root.right == null){return 1;}return Math.max(maxDepth(root.left), maxDepth(root.right))+1;}
}

迭代解法

        这个解法实际上就是改造一下非递归后序遍历的代码,因为每次遍历都会将节点入栈,我们只需要在弹栈之前,记录一下栈的大小,取最大值就好。

class Solution {public int maxDepth(TreeNode root) {LinkedList<TreeNode> stack = new LinkedList<>();TreeNode pop = null;int ans = 0;while(root != null || !stack.isEmpty()){if(root != null){stack.push(root);root = root.left;}else{ans = Math.max(ans, stack.size());TreeNode peek = stack.peek();if(peek.right == null || peek.right == pop){pop = stack.pop();}else{root = peek.right;}}}return ans;}
}

3、111. 二叉树的最小深度

递归解法

        一开始我想着和第2题一个思路,结果发现这样不行。比如这种退化成链表的树

如果直接套用最大深度的代码,会返回1

        所以我们需要判断一下,如果左子树深度是0,那么就返回右子树+1的深度,对于右子树同理。

class Solution {public int minDepth(TreeNode root) {if(root == null) return 0;if(root.left == null && root.right == null) return 1;int left = minDepth(root.left);int right = minDepth(root.right);if(left == 0) return right+1;else if(right == 0) return left+1;else return Math.min(left, right) + 1; }
}

层序遍历

        最大深度也可以用层序遍历来写,因为层序遍历就是遍历每一层嘛,最大深度就遍历到最后一层,最小深度就遍历到第一个叶子节点就好了。

        我们用队列来实现,每次拓展结点的时候都检查一下是否有左右节点,如果都没有,就可以返回层数了。

class Solution {public int minDepth(TreeNode root) {if(root == null) return 0;LinkedList<TreeNode> q = new LinkedList<>();int cnt = 0;q.offer(root);while(!q.isEmpty()){cnt++;int len = q.size();for(int i = 0; i < len; i++){boolean f = true;TreeNode t = q.poll();if(t.left != null){q.offer(t.left);f = false;}if(t.right != null){q.offer(t.right);f = false;}if(f) return cnt;}}return cnt;}
}

4、 226. 翻转二叉树

举个例子,如果要翻转如下的树:

先交换2、3:

然后交换3的孩子节点、2的孩子节点

每一步的操作都是一样的,于是我们就能用递归解决。

class Solution {public TreeNode invertTree(TreeNode root) {invert(root);return root;}void invert(TreeNode node){if(node == null) return;TreeNode t = node.left;node.left = node.right;node.right = t;invert(node.left);invert(node.right);}
}

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

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

相关文章

Node.js 包管理工具

一、概念介绍 1.1 包是什么 『包』英文单词是 package &#xff0c;代表了一组特定功能的源码集合 1.2 包管理工具 管理『包』的应用软件&#xff0c;可以对「包」进行 下载安装 &#xff0c; 更新 &#xff0c; 删除 &#xff0c; 上传 等操作。 借助包管理工具&#xff0…

ACM训练题:Fadi and LCM

首先LCM&#xff08;a&#xff0c;b&#xff09;X&#xff0c;说明a*b>X&#xff0c;当且仅当a&#xff0c;b互质时相等&#xff0c;题意要让a&#xff0c;b都尽可能小&#xff0c;最好让a*bX&#xff0c;即a&#xff0c;b互质。原因如下&#xff1a; 最小公倍数由a、b中最…

flutter go_router 官方路由(一)基本使用

1 项目中添加最新的依赖 go_router: ^13.1.0如下图所示&#xff0c;我当前使用的flutter版本为3.16.0 然后修改应用的入口函数如下&#xff1a; import package:flutter/material.dart; import package:go_router/go_router.dart;void main() {runApp(const MyApp()); }cla…

使用java -jar命令运行jar包提示“错误:找不到或无法加载主类“的问题分析

用maven把普通java项目打包成可运行的jar后&#xff0c;打开cmd用java -jar运行此jar包时报错&#xff1a; 用idea运行该项目则没有问题 。 其实原因很简单&#xff0c;我们忽略了2个细节。 java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我…

vue前端+nodejs后端通信-简单demo

本文记录vue前端nodejs后端通讯最简单的方法&#xff0c;供广大网友最快速进入全栈开发。 技术架构 前端 vue axios 后端 nodejs express 一、前端部分-搭建VUE 项目 vue create Vnodenpm run serve 启动&#xff1b; 具体操作步骤&#xff0c;请自行百度&#xff0c;这里没…

【RT-DETR有效改进】利用SENetV1重构化网络结构 (ILSVRC冠军得主)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是SENet(Squeeze-and-Excitation Networks)其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型,而是一个可以和现有的任何一个模型相结合…

PMP资料怎么学?PMP备考经验分享

PMP考试前大家大多都是提前备考个一两个月&#xff0c;但是有些朋友喜欢“不走寻常路”&#xff0c;并不打算去考PMP认证&#xff0c;想要单纯了解PMP&#xff0c;不管要不要考证&#xff0c;即使是仅仅学习了解一下我个人都非常支持&#xff0c;因为专业的基础的确能提高工作效…

windows10 利用DDNS-GO解析IPV6 IPV4 阿里云 腾讯云 华为云

这里写目录标题 [工具包DDNS-GO Windows 版](https://github.com/jeessy2/ddns-go/releases)创建ddns-go windows服务打开浏览器 输入127.0.0.1:9876 就可以使用ddns-go解析ipv4 或者 IPV6 了创建的服务已经在windows的服务管理里面自动启动了 工具包DDNS-GO Windows 版 创建dd…

jmeter-04创建请求

文章目录 一、发送请求-查看响应流程二、新建请求三、选择请求方式&#xff0c;填写url1.发送get请求当只有请求方式不一样的时候&#xff0c;参数都填写在参数栏里面&#xff0c;GET请求与POST请求的区别&#xff1f; 2.发送post请求2.1 application/x-www-form-urlencoded2.2…

挑战杯 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

微信小程序实现时间轴效果

目录 引言时间轴效果的应用场景微信小程序的优势时间轴效果的设计思路时间轴界面布局数据结构设计实现时间轴效果WXML结构设计WXSS样式设计JavaScript逻辑实现说明引言 时间轴效果的应用场景 时间轴效果作为一种独特且直观的信息展示形式,已经被广泛应用于各种场景中,提供了…

const

当我们在c语言中碰到这么一种情况&#xff1a;我们现在有一个变量&#xff0c; 这个变量呢&#xff0c;我们指向访问它&#xff0c; 但不会修改它。但是又担心在后续的代码中不小心将它修改&#xff0c; 这种情况该怎么做呢&#xff1f;这种情况下可以使用const. 被const修饰的…