【二叉树】三种方式解决翻转二叉树问题
题目描述
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
思路:
可能大家开始看都觉得很懵,但是我们要抓住这道题的本题。所谓的翻转二叉树还不如就叫交换二叉树左右子节点,说到这里是不是就很清晰了。
对于交换二叉树左右子节点来说我们可以采取很多方式,换句话说,如何遍历不重要,只要在遍历过程中,交换遍历到的每个节点的左右子节点就可以了。
方法一: 递归先序遍历(后序遍历也可以)
递归函数的退出条件为当前遍历到的节点为空,每次遍历到一个节点,执行的操作为交换其左右子节点,然后再递归的遍历其左右子树。
// 翻转二叉树 _ 递归法public TreeNode invertTree(TreeNode root) {if(root == null){return null;}swap(root);invertTree(root.left);invertTree(root.right);return root;}public void swap(TreeNode root){TreeNode temp = root.left;root.left = root.right;root.right = temp;}
方法二:迭代先序遍历
二叉树的递归遍历法可以用迭代的方式写出,因此稍作修改就能得到如下代码。在迭代遍历的过程中交换左右节点即可。
// 翻转二叉树 _ 迭代法public TreeNode invertTree2(TreeNode root){if(root == null){return root;}Stack<TreeNode> stack = new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.pop();if(node.left != null) stack.push(node.left);if(node.right != null) stack.push(node.right);swap(node);}return root;}
方法三:层序遍历
因为本题只需要交换每个节点的左右节点,因此与层序遍历也是可以解决的,同样是采用在遍历的过程中,交换每个遍历到的节点的左右节点即可。
// 翻转二叉树 _ 层序遍历public TreeNode invertTree3(TreeNode root){if(root == null){return root;}Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(!queue.isEmpty()){int size = queue.size();for(int i=0; i<size; i++){TreeNode node = queue.poll();swap(node);if(node.left != null) queue.offer(node.left);if(node.right != null) queue.offer(node.right);}}return root;}
总结:通过这道题的解决,我体会到了二叉树问题的解决离不开二叉树的基础遍历方法,因此,一定要学好并理解基础遍历方法。
【二叉树】三种方式解决翻转二叉树问题相关推荐
- Qt工作笔记-三种方式解决Qt5中文编码问题
目录 前言 方式一 方式二 方式三 三种方式解决Qt5中文编码问题 前言 这里不谈原理,只说如何去做! 这里本人自己总结下,今天遇到了新的编码问题,在此记录下,方面以后快速调用. 把这三种方法顺序试下 ...
- Spring 容器:三种方式解决 Resource leak: ‘applicationContext‘ is never closed 问题
文章目录 前言 一.Spring 容器警告的产生 1.1.项目场景 二.Spring 容器未关闭后果分析 2.1.肉眼可见的警告 2.2.导致的内存泄漏 2.2.1.什么是内存泄漏? 2.2.2.如何 ...
- v html如何添加样式,详解三种方式解决vue中v-html元素中标签样式
Vue为v-html中标签添加CSS样式 {{news.title}} {{news.datetime}} 返回列表 当我们使用v-html渲染页面,使用下面这种方式去修改样式并没有效果, .con{ ...
- vue v-html字体大小修改,详解三种方式解决vue中v-html元素中标签样式
Vue为v-html中标签添加CSS样式 {{news.title}} {{news.datetime}} 返回列表 当我们使用v-html渲染页面,使用下面这种方式去修改样式并没有效果, .con{ ...
- 【 Perl 】三种方式解决” Wide character in print “
1.binmode STDOUT, ":utf8"; 因为程序本身是用utf8编码的(可以用use utf;明示给Perl).这句话就是告诉Perl输出是utf8编码的. 2.us ...
- JAVA解决生产消费者_Java常用三种方式解决生产者消费者问题(详细)
package test; /** * Synchronized 版本解决生产者消费者 * wait() / notify()方法 */ import java.util.LinkedList; im ...
- 剑指offer——复习1:二叉树三种遍历方式的迭代与递归实现
剑指offer--复习1:二叉树三种遍历方式的迭代与递归实现 20180905更新:这个博客中的解法不是很好,看相应的LeetCode题目笔记~~~ 我感觉此博客中的说法更容易让人理解:https:/ ...
- $.ajax 加了headers报错_Springboot解决Ajax跨域的三种方式
这篇文章不华丽,但比较实用,能解决不少大家实际业务中的问题.大家可以收藏起来,以备用时之需! 1.同源策略 1.1 含义 ajax出现请求跨域错误问题,主要原因就是因为浏览器的"同源策略&q ...
- AJAX异步请求解决跨域问题的三种方式
一 什么是跨域 出于浏览器的同源策略限制.同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说We ...
最新文章
- SEO之网站页面优化策略
- spring aop实现过程之三Spring AOP中Aspect编织的实现
- 神经网络,流形和拓扑Neural Networks, Manifolds, and Topology
- matlab白噪音wav,通过matlab产生wav的白噪声.pdf
- 征战蓝桥 —— 2014年第五届 —— C/C++A组第4题——史丰收速算
- 计算机 游戏 排名2015年,2015十大高性能游戏笔记本电脑排行 最强游戏本推荐
- Python---编程检查并判断密码字符串的安全强度
- jQuery.Form.js 异步提交表单使用总结
- perl语言之列表与数组
- 生物信息学概论_大学专业详解系列83——生物信息学(理学学士)
- Word2Vec学习笔记(二)
- 15个带示例的jQuery滚动条插件
- 【maven】maven dependencyManagement 锁定Jar包版本
- DataTable类(MSDN)
- C#中IListT与ListT的区别感想
- 【Python学习】sklearn层次聚类
- 利用Java反射机制调用含数组参数的方法
- 基于JAVA电商购物商城系统设计与实现 开题报告
- HTTPS 证书手机浏览有风险怎么办
- jquery 堆栈溢出_带有jQuery和CSS3的漂亮照片堆栈库
热门文章
- LeetCode 453. 最小移动次数使数组元素相等
- 推荐一下:BIOS之家
- 福禄克DSX-5000 官方授权代理
- vs打开sln是空白_周末惊喜版块 | 新文速递 强推全息网游无限流鬼怪文/软妹身大佬心锦鲤女主VS阴郁暴躁倒霉蛋男主【言情】01.20...
- WordPress自适应主题Puock v2.4/白天暗夜高颜值无刷新加载首页支持三种布局
- Springboot 集成kafka
- 柔情在暗夜思绪里泛滥(转)
- 数仓建设几个关键问题
- C盘temp目录cab_xxxx_x文件
- 2016-2020历年旗舰新机