12.翻转、对称二叉树,二叉树的深度

反转二叉树

递归写法

很简单

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root==nullptr)return root;TreeNode* tmp;tmp=root->left;root->left=root->right;root->right=tmp;invertTree(root->left);invertTree(root->right);return root;}
};

迭代写法

先序遍历

class Solution {
public:TreeNode* invertTree(TreeNode* root) {stack<TreeNode*> sta;if(root)sta.push(root);TreeNode* cur;while(!sta.empty()){cur=sta.top();sta.pop();if(cur->left)sta.push(cur->left);if(cur->right)sta.push(cur->right);TreeNode* tmp=cur->left;cur->left=cur->right;cur->right=tmp;}return root;}
};

后序也可以;

但是中序遍历不行;

class Solution {
public:TreeNode* invertTree(TreeNode* root) {stack<TreeNode*> sta;if(root)sta.push(root);TreeNode* cur;while(!sta.empty()){cur=sta.top();sta.pop();if(cur){if(cur->right)sta.push(cur->right);sta.push(cur);sta.push(nullptr);if(cur->left)sta.push(cur->left);}else{cur=sta.top();sta.pop();TreeNode* tmp=cur->left;cur->left=cur->right;cur->right=tmp;}}return root;}
};

但是这个是可以过oj的

对称二叉树

反转之后再和原来的树比较,一模一样就是对称的。

但是这样还要复制一棵树,浪费空间。

应该两个指针同时遍历,镜像遍历:

只能是后序遍历?

  • 前序遍历

image-20250210210421096

这种情况会出现假阳性,根本在于前序遍历不能唯一标识一棵树

  • 中序遍历

同理,中序遍历也不能唯一标识一棵树:加法的二义性

image-20250210211147749

  • 后序遍历

后序遍历也不能唯一标识一棵树,例子同前序遍历的例子。

所以:并非只有后序遍历才行

class Solution {
public:bool Compare(TreeNode* cur1,TreeNode* cur2){if(cur1->left&&cur2->right){if(cur1->left->val!=cur2->right->val)return 0;}else if(cur1->left&&!cur2->right){return 0;}else if(!cur1->left&&cur2->right){return 0;}if(cur2->left&&cur1->right){if(cur2->left->val!=cur1->right->val)return 0;}else if(cur2->left&&!cur1->right){return 0;}else if(!cur2->left&&cur1->right){return 0;}return 1;}bool isSymmetric(TreeNode* root) {stack<TreeNode*> sta1;stack<TreeNode*> sta2;if(root){sta1.push(root);sta2.push(root);}TreeNode* cur1,*cur2;while(!sta1.empty()&&!sta2.empty()){cur1=sta1.top();sta1.pop();cur2=sta2.top();sta2.pop();if(!Compare(cur1,cur2))return 0;if(cur1->right)sta1.push(cur1->right);if(cur1->left)sta1.push(cur1->left);if(cur2->left)sta2.push(cur2->left);if(cur2->right)sta2.push(cur2->right);}return 1;}
};

只需要在比较时添加上子节点的因素,就可以避免假阳性

二叉树最大深度

层序遍历

class Solution {
public:int maxDepth(TreeNode* root) {queue<TreeNode*> que;if(root) que.push(root);int cur_size=1,nxt_size=0;int depth=0;while(!que.empty()){TreeNode* cur=que.front();que.pop();if(cur->left){nxt_size++;que.push(cur->left);}if(cur->right){nxt_size++;que.push(cur->right);}if(--cur_size==0){depth++;cur_size=nxt_size;nxt_size=0;}}return depth;}
};

更简洁的写法:

class Solution {
public:int maxDepth(TreeNode* root) {if (root == NULL) return 0;int depth = 0;queue<TreeNode*> que;que.push(root);while(!que.empty()) {int size = que.size();depth++; // 记录深度for (int i = 0; i < size; i++) {TreeNode* node = que.front();que.pop();if (node->left) que.push(node->left);if (node->right) que.push(node->right);}}return depth;}
};

二叉树最小深度

层序遍历

class Solution {
public:int minDepth(TreeNode* root) {queue<TreeNode*> que;if(root) que.push(root);int cur_size=1,nxt_size=0;int depth=0;while(!que.empty()){TreeNode* cur=que.front();que.pop();if(!cur->left&&!cur->right)return depth+1;if(cur->left){nxt_size++;que.push(cur->left);}if(cur->right){nxt_size++;que.push(cur->right);}if(--cur_size==0){depth++;cur_size=nxt_size;nxt_size=0;}}return depth;}
};

->right){
nxt_size++;
que.push(cur->right);
}
if(–cur_size==0){
depth++;
cur_size=nxt_size;
nxt_size=0;
}

   }return depth;
}

};


> 判断有没有叶节点

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

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

相关文章

网络安全行业的冬天

冬天已经来了&#xff0c;春天还会远吗&#xff1f;2022年10月28日&#xff0c;各个安全大厂相继发布了财报&#xff0c;纵观2022年前三季度9个月&#xff0c;三六零亏了19亿&#xff0c;奇安信亏了11亿&#xff0c;深信服亏了6亿&#xff0c;天融信亏了4亿&#xff0c;安恒亏了…

MYSQL索引与视图

一、新建数据库 mysql> create database mydb15_indexstu; mysql> use mydb15_indexstu; 二、新建表 &#xff08;1&#xff09;学生表Student mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-…

深度优先搜索(DFS)——八皇后问题与全排列问题

&#xff08; ^ _ ^ &#xff09; 数据结构好难哇&#xff08;哭 1.BFS和DFS 数据结构空间性质DFSstackO(h)不具有最短性质BFSqueueO(2^h)具有最短路性质 空间上DFS占优势&#xff0c;但是BFS具有最短性 &#xff08;若所有权重都是1&#xff0c;则BFS一定最短&#xff09;&…

Flink 内存模型各部分大小计算公式

Flink 的运行平台 如果 Flink 是运行在 yarn 或者 standalone 模式的话&#xff0c;其实都是运行在 JVM 的基础上的&#xff0c;所以首先 Flink 组件运行所需要给 JVM 本身要耗费的内存大小。无论是 JobManager 或者 TaskManager &#xff0c;他们 JVM 内存的大小都是一样的&a…

Vue07

一、Vuex 概述 目标&#xff1a;明确Vuex是什么&#xff0c;应用场景以及优势 1.是什么 Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;Vuex 是一个插件&#xff0c;可以管理 Vue 通用的数据 (多组件共享的数据)。例如&#xff1a;购物车数…

Linux内核中的软中断与NAPI机制:高效处理网络数据包

在现代操作系统中,中断处理是系统性能的关键因素之一,尤其是在处理高负载的网络数据包时。Linux内核通过软中断(SoftIRQ)和NAPI(New API)机制,实现了高效的网络数据包处理。本文将深入探讨软中断和NAPI机制的原理、实现方式以及它们在处理网络数据包中的作用。 一、软中…

Linux 安装 Ollama

1、下载地址 Download Ollama on Linux 2、有网络直接执行 curl -fsSL https://ollama.com/install.sh | sh 命令 3、下载慢的解决方法 1、curl -fsSL https://ollama.com/install.sh -o ollama_install.sh 2、sed -i s|https://ollama.com/download/ollama-linux|https://…

Docker Desktop无法安装报错(求助记录中)

之前Docker Desktop无法使用&#xff0c;报了一个注册表的错误&#xff08;忘记截图&#xff09;我想着更新安装下应该就好了&#xff0c;结果Docker Desktop一直无法安装&#xff0c;花了几天都没解决。同时我的window11更新也出现下载错误 - 0x80040154异常,启动或关闭Window…

Docker入门(Windows)

视频链接&#xff1a;Docker | 狂神说 环境说明 Windows For Docker WSL2 概念 Docker是什么&#xff1f; 百度百科&#xff1a;百度百科 Docker 是一个开源的平台&#xff0c;它利用操作系统级虚拟化技术来打包和运行应用程序。通过使用容器化技术&#xff0c;Docker 提…

kafka生产者之发送模式与ACK

文章目录 Kafka的发送模式Kafka的ack机制发送模式与ack的关联重试次数总结 在Kafka中&#xff0c;发送模式与ack机制紧密相关&#xff0c;它们共同影响着消息发送的可靠性和性能。 Kafka的发送模式 发后即忘&#xff08;Fire and Forget&#xff09;&#xff1a;生产者发送消息…

STM32 RTC亚秒

rtc时钟功能实现&#xff1a;rtc模块在stm32内部&#xff0c;由电池或者主电源供电。如下图&#xff0c;需注意实现时仅需设置一次初始化。 1、stm32cubemx 代码生成界面设置&#xff0c;仅需开启时钟源和激活日历功能。 2、生成的代码,需要对时钟进行初始化&#xff0c;仅需…

kafka服务端之延时操作实现原理

文章目录 背景案例延时生产实现原理延时拉取实现原理 总结 背景 上篇我们说到了kafka时间轮是延时操作内部实现的重要数据结构&#xff0c;这篇我们来说下kafka内部的延时操作实现原理。这里我们以延时生产和延时拉取为例说明延时操作的实现原理。 案例 延时生产 我们知道如…

【算法】动态规划专题⑥ —— 完全背包问题 python

目录 前置知识进入正题模板 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 完全背包问题是动态规划中的一种经典问题&#xff0c;它与0-1背包问题相似&#xff0c;但有一个关键的区别&#xff1a;在完全背包问题中&#xff0c;每种物品都有无限的数量可用。…

第四十章:职场转折:突破困境,重新出发

从绍兴与岳父岳母温馨相聚归来后&#xff0c;小冷满心都是温暖与幸福&#xff0c;本以为生活与工作会继续平稳前行&#xff0c;然而&#xff0c;命运却悄然为他的职场之路埋下了转折的伏笔。 平静工作下的暗潮涌动 小冷所在的公司是一家专注于地图导航与位置服务的企业&#xf…

VSCode中出现“#include错误,请更新includePath“问题,解决方法

1、出现的问题 在编写C程序时&#xff0c;想引用头文件但是出现如下提示&#xff1a; &#xff08;1&#xff09;首先检查要引用的头文件是否存在&#xff0c;位于哪里。 &#xff08;2&#xff09;如果头文件存在&#xff0c;在编译时提醒VSCode终端中"#include错误&am…

ElementUI的常用组件及使用技巧

1. 引言 项目背景与目标 随着前端技术的快速发展,构建高效、美观的用户界面变得越来越重要。ElementUI作为一款基于Vue.js的组件库,提供了丰富的组件和工具,帮助开发者快速构建高质量的Web应用。本文旨在介绍ElementUI的常用组件及其使用技巧,帮助开发者更好地利用Elemen…

实验5 配置OSPFv2验证

实验5 配置OSPFv2验证 1.实验目的 &#xff08;1&#xff09;OSPFv2 验证的类型和意义。 &#xff08;2&#xff09;配置基于区域的 OSPFv2 简单口令验证和 MD5 验证的方法。 &#xff08;3&#xff09;配置基于链路的 OSPFv2 简单口令验证和 MD5 验证的方法。 2.实验准备 配置…

ssm校园二手交易平台小程序

博主介绍&#xff1a;✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【WebLogic】Linux图形化界面创建WebLogic应用域

接上一篇的WebLogic在Linux图形化界面安装&#xff0c;默认勾选域创建 修改默认的域路径&#xff1a; 模板默认即可 为管理员设置用户名&#xff08;默认weblogic&#xff09;和密码 这一步应该就是14.1.2版本的secured production mode&#xff0c;即在创建应用域的时候&…

java poi Excel 文件导入导出常见错误及解决方案

在使用 Apache POI 进行 Excel 文件的导入导出操作时&#xff0c;可能会遇到各种问题。以下是一些常见的错误及其解决方案&#xff1a; 一、文件格式相关问题 1. 文件格式不兼容 问题描述&#xff1a;尝试使用 HSSFWorkbook 读取 .xlsx 文件&#xff0c;或者使用 XSSFWorkbo…