【剑指offer】27. 二叉树的镜像
剑指 Offer 27. 二叉树的镜像
知识点:二叉树;递归;栈
题目描述
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
示例
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
解法一:递归法
函数功能:二叉树镜像;
1、终止条件:root==null的时候,返回null;
2、每个节点该做什么:将两个孩子节点互换;
3、什么时候做:递去的时候或者回来的时候都行(前序或者后序都行)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if(root == null) return null;
TreeNode temp = root.right;
root.right = root.left;
root.left = temp;
mirrorTree(root.left);
mirrorTree(root.right);
return root;
}
}
时间复杂度;0(N),每个节点恰好被遍历一次;
空间复杂度;O(N),递归过程中栈的开销;
解法二:栈
自己构造一个辅助栈,依次遍历所有的节点,并交换每个节点的左右孩子;
规则:
压入根节点;
1.弹出;
2.压入弹出节点的左右孩子,并交换;
其实是一层一层,一个节点一个节点的处理。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if(root == null) return null;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode top = stack.pop();
if(top.left != null) stack.push(top.left);
if(top.right != null) stack.push(top.right);
TreeNode temp = top.left;
top.left = top.right;
top.right = temp;
}
return root;
}
}
时间复杂度;0(N),每个节点恰好被遍历一次;
空间复杂度;O(N),递归过程中栈的开销
相关链接
【剑指offer】27. 二叉树的镜像的更多相关文章
- 力扣 - 剑指 Offer 27. 二叉树的镜像
题目 剑指 Offer 27. 二叉树的镜像 思路1(递归) 我们可以使用深度优先搜索,先递归到链表的末尾,然后从末尾开始两两交换.就相当于后续遍历而已 记得要先保存下来node.right节点,因为 ...
- 【Java】 剑指offer(27) 二叉树的镜像
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 思路 画图可 ...
- 剑指offer——27二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...
- 剑指 Offer 27. 二叉树的镜像
同LeetCode226翻转二叉树 1 class Solution { 2 public: 3 TreeNode* mirrorTree(TreeNode* root) { 4 if(root == ...
- 《剑指offer》 二叉树的镜像
本题来自<剑指offer>二叉树的镜像 题目: 操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 ...
- 【剑指Offer】二叉树的镜像 解题报告(Python)
[剑指Offer]二叉树的镜像 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- Go语言实现:【剑指offer】二叉树的镜像
该题目来源于牛客网<剑指offer>专题. 操作给定的二叉树,将其变换为源二叉树的镜像. 示例: 输入: 4 / 2 7 / \ / 1 3 6 9 输出: 4 / 7 2 / \ / 9 ...
- 剑指Offer 18. 二叉树的镜像 (二叉树)
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...
- 剑指offer:二叉树的镜像
题目描述: 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / ...
- 【剑指offer】二叉树的镜像,C++实现(先序遍历)
原创博文,转载请注明出处!github地址 博客文章索引地址 1.题目 输入一颗二叉树,将二叉树变换为原二叉树的镜像,如下图所示: 2.思路 二叉树有0个节点 二叉树有1个节点 二叉树有 ...
随机推荐
- thymeleaf+Springboot实现自定义标签
在项目开发中,有一些组件不能满足我们快速开发的要求,我们需要封装一些组件来更加的便利我们.比如,我们可以封装一个下拉框组件,只要开发人员只有引用这个组件的标签,就能出现效果,而不用再去请求url,渲染 ...
- 读HikariCP源码学Java(二)—— 因地制宜的改装版ArrayList:FastList
前言 如前文所述,HikariCP为了提高性能不遗余力,其中一个比较特别的优化是它没有直接使用ArrayList,而是自己实现了FastList,因地制宜,让数组的读写性能都有了一定程度的提高. 构造 ...
- P1522 [USACO2.4]牛的旅行 Cow Tours(Floyd)
题目描述 Farmer John 的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer Joh ...
- 【NX二次开发】Block UI 从列表选择部件
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- python学习笔记05-条件分支与循环1
思考问题:100分制,90分以上为A,80-90为B,60-80为C,60以下为D,当用户输入成绩后,打印对应的字母 temp=input('请输入你的成绩:') score=int(temp) if ...
- 台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接
前言 台达AS系列,型号为AS322P. 物理设备连接 使用WPL Editor连接PLC 使用RS485口当作RS232口连接PLC 注意: ...
- WEB安全新玩法 [5] 防范水平越权之查看他人订单信息
水平越权是指系统中的用户在未经授权的情况下,查看到另一个同级别用户所拥有的资源.水平越权会导致信息泄露,其产生原因是软件业务设计或编码上的缺陷.iFlow 业务安全加固平台可以缓解部分场景下的水平越权 ...
- SSH远程登录相关教程
命令概述 命令 英文 ssh 用户名@ip secure shell scp 用户名@ip:文件名或路径 用户名@ip:文件名或路径 secure copy 在 Linux 中 SSH 是 非常常用 ...
- ES6 数组的方法
数组的类 数组的类是Array 数组的定义 var arr=[元素] var arr=new Array(3) 数字3,代表有三个元素或者三个空位 如果数组定义采用 new 实例,类中跟的是一个数字 ...
- Docker搭建EFK日志收集系统,并自定义es索引名
EFK架构图 一.EFK简介 EFK不是一个软件,而是一套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用,是目前主流的一种日志系统. EFK是三个开源软件的缩写,分 ...