算法通关村第八关——轻松搞定翻转二叉树

二叉树有很多经典算法题,今天我们就来看一下二叉树里的翻转问题。

力扣226,给了一棵二叉树,要将二叉树整体翻转。

在这里插入图片描述

分析观察图中翻转前后的二叉树,我们不难发现,翻转过程中,只需要把每一个节点的左右子节点交换以下就可以了,但是我们应该以什么样的顺序来遍历二叉树呢?如果是前序遍历,我们从根节点开始,用递归的方法来交换根节点的左右子树,一直到叶子结点。如果是后序遍历,就先交换叶子结点,如果当前遍历到的节点的左右子树均已翻转,就只需要交换两棵子树位置,就可以完成二叉树的翻转。

在这里插入图片描述

前序遍历

// 前序遍历交换左右子节点,自顶向下
function invertTree(root) {if (root === null) {return null;}// 交换左右子节点let temp = root.left;root.left = root.right;root.right = temp;invertTree(root.left);invertTree(root.right);return root;
}

后序遍历

// 后序遍历交换左右子节点,最后再交换根节点的左右子树,自底向上
function invertTree(root) {if (root === null) {return null;}// 先交换叶子节点的位置let left = invertTree(root.left);let right = invertTree(root.right);root.left = right;root.right = left;return root;
}

此外,层次遍历也可以实现翻转,先将二叉树的根节点放入队列,然后从队列中拿出节点,交换节点的左右子节点,如果交换后的左右子节点不为空,则将左右子节点放入队列,再拿出节点,交换左右子节点,迭代处理。

function invertTree(root) {if (root === null) {return null;}// 将二叉树节点放入队列中const treeQueue = [root];while (treeQueue.length !== 0) {// 每次从队列中取出一个节点,并交换这个节点的左右子树let temp = treeQueue.pop();let left = temp.left;temp.left = temp.right;temp.right = left;// 如果当前节点的左子树不为空,则放入队列等待后续处理if (temp.left !== null) {treeQueue.push(temp.left);}// 如果当前节点的右子树不为空,放入队列等待后续处理if (temp.right) {treeQueue.push(temp.right);}}return root;
}

总结

二叉树的经典算法问题主要考察的还是对二叉树前中后序三种遍历方法的掌握。建议多做多看多思考。

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

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

相关文章

如何在前端实现WebSocket发送和接收UDP消息(多线程模式)

目录 简介:步骤1:创建WebSocket连接步骤2:创建Web Workers步骤3:发送和接收UDP消息(多线程模式)结束语: 简介: 本文将继续介绍如何在前端应用中利用WebSocket技术发送和接收UDP消息…

jQuery使用(超详细)

一、jQuery介绍 1.JQuery简介 jQuery 是一个高效、精简并且功能丰富的 JavaScript 工具库。它提供的 API 易于使用且兼容众多浏览器,这让诸如 HTML 文档遍历和操作、事件处理、动画和 Ajax 操作更加简单。目前超过90%的网站都使用了jQuery库,jQuery的宗…

为什么贴片电阻的阻值不规律?为了在某精度下做到阻值的全覆盖(对,但不全对),E系列电阻的算法(E12系列值不对的猜想)

1、先放上E系列的电阻表格 E12精度10%,E24精度5%,E96精度1%; 2、以精度作为条件的演算 通常我们选择电阻,要确定电阻的精度,如果以精度作为条件。 以10%精度来说:(数值少,好算&am…

大专非科班转码成功自白

大专非科班转码成功自白 文章目录 大专非科班转码成功自白初步学习进阶学习提供阶段面试阶段总结 2023年是博主从业18年以来找工作最难的一年。但程序员这个行业还是被很多毕业生青睐。就业相对比较好,收入相对比较高,虽然面临996,依然给很多…

网络安全--linux下Nginx安装以及docker验证标签漏洞

目录 一、Nginx安装 二、docker验证标签漏洞 一、Nginx安装 1.首先创建Nginx的目录并进入: mkdir /soft && mkdir /soft/nginx/cd /soft/nginx/ 2.下载Nginx的安装包,可以通过FTP工具上传离线环境包,也可通过wget命令在线获取安装包…

从零实战SLAM-第九课(后端优化)

在七月算法报的班,老师讲的蛮好。好记性不如烂笔头,关键内容还是记录一下吧,课程入口,感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…

uniapp的UI框架组件库——uView

在写uniapp项目时候,官方所推荐的样式库并不能满足日常的需求,也不可能自己去写相应的样式,费时又费力,所以我们一般会去使用第三方的组件库UI,就像vue里我们所熟悉的elementUI组件库一样的道理,在uniapp中…

预测算法系列5—核极限学习机KELM及其实现(Matlab)

回归: 分类: 在上一篇文章中我介绍了极限学习机ELM的实现和优化,极限学习机虽然具有训练速度快、复杂度低、克服了传统梯度算法的局部极小、过拟合和学习率的选择不合适等优点,但在比较复杂的分类、回归等非线性模式识别任务往往…

DaVinci Resolve Studio 18 for Mac 达芬奇调色

DaVinci Resolve Studio 18是一款专业的视频编辑和调色软件,适用于电影、电视节目、广告等各种视觉媒体的制作。它具有完整的后期制作功能,包括剪辑、调色、特效、音频处理等。 以下是DaVinci Resolve Studio 18的主要特点: - 提供了全面的视…

Android Studio实现解析HTML获取图片URL,将URL存到list,进行列表展示

目录 效果build.gradle(app)添加的依赖(用不上的可以不加)AndroidManifest.xml错误代码activity_main.xmlitem_image.xmlMainActivityImage适配器ImageModel 接收图片URL效果 build.gradle(app)添加的依赖(用不上的可以不加) dependencies {implementation com.square…

解决跨时区跨语言的国外大文件传输问题

随着信息技术的飞速发展和全球化的深入推进,跨国团队、跨国公司之间的合作变得越来越普遍。在这种背景下,大文件的传输成为了一个经常遇到的挑战。跨语言、跨时区的国外大文件传输,由于涉及到复杂的网络环境、不同国家法律法规等多方面的问题…

02-前端基础第二天-HTML5

01-HTML标签(下)导读 目标: 能够书写表格能够写出无序列表能够写出3~4个常用input表单类型能够写出下拉列表表单能够使用表单元素实现注册页面能够独立查阅W3C文档 目录: 表格标签列表标签表单标签综合案例查阅文档 02-表格标…