每日算法题 | 剑指offer 二叉树专题 (14) 二叉树的镜像
2020-12-15 20:01
1346 查看
重磅干货,第一时间送达
题目
二叉树的镜像
题目要求
操作给定的二叉树,将其变换为源二叉树的镜像。
解题思路
存在三种可能:
二叉树有0个节点
二叉树有1个节点
二叉树有多个节点(普通二叉树和只有单侧子节点的二叉树)
Python :
1# -*- coding:utf-8 -*- 2# class TreeNode: 3# def __init__(self, x): 4# self.val = x 5# self.left = None 6# self.right = None 7class Solution: 8 # 返回镜像树的根节点 9 #从根节点反转的时候,调整左右子节点,也会把左右子节点带着的子树进行了调整。 10 #因此,整棵二叉树会进行了左右的反转。 11 def Mirror(self, root): 12 if not root: 13 return None 14 #这里注意只能用一行来赋值,或是另写一个swap函数来实现左右交换 15 #如果换成分别赋值,就会出错 16 root.left, root.right = root.right, root.left 17 if root.left: 18 self.Mirror(root.left) 19 if root.right: 20 self.Mirror(root.right)
C++
1/* 2struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9};*/ 10class Solution { 11public: 12 void Mirror(TreeNode *pRoot) { 13 if(!pRoot) 14 return; 15 16 TreeNode* flag = pRoot->left; 17 pRoot->left=pRoot->right; 18 pRoot->right = flag; 19 Mirror(pRoot->left); 20 Mirror(pRoot->right); 21 } 22};
JAVA
1public class Solution { 2 public void Mirror(TreeNode root) { 3 if(root==null) 4 return; 5 if(root.left==null&&root.right==null){ 6 return; 7 } 8 //交换子节点 9 TreeNode temp = root.left; 10 root.left = root.right; 11 root.right = temp; 12 //递归 13 Mirror(root.left); 14 Mirror(root.right); 15 } 16}
后记
2020大厂笔试 | 网易提前批(1)
2020大厂笔试 | 网易提前批(2)
数据结构类题目
- LinkedList
- 003-从尾到头打印链表
- 014-链表中倒数第k个结点
- 015-反转链表
- 016-合并两个或k个有序链表
- 025-复杂链表的复制
- 036-两个链表的第一个公共结点
- 055-链表中环的入口结点
- 056-删除链表中重复的结点
- Tree
- 004-重建二叉树
- 017-树的子结构
- 018-二叉树的镜像
- 022-从上往下打印二叉树
- 023-二叉搜索树的后序遍历序列
- 024-二叉树中和为某一值的路径
- 026-二叉搜索树与双向链表
- 038-二叉树的深度
- 039-平衡二叉树
- 057-二叉树的下一个结点
- 058-对称的二叉树
- 059-按之字形顺序打印二叉树
- 060-把二叉树打印成多行
- 061-序列化二叉树
- 062-二叉搜索树的第k个结点
- Stack & Queue
- 005-用两个栈实现队列
- 020-包含min函数的栈
- 021-栈的压入、弹出序列
- 044-翻转单词顺序列(栈)
- 064-滑动窗口的最大值(双端队列)
- Heap
- 029-最小的K个数
- Hash Table
- 034-第一个只出现一次的字符
- 图
- 065-矩阵中的路径(BFS)
- 066-机器人的运动范围(DFS)
- 具体算法类题目
- 斐波那契数列
- 007-斐波拉契数列
- 008-跳台阶
- 009-变态跳台阶
- 010-矩形覆盖
- 搜索算法
- 001-二维数组查找
- 006-旋转数组的最小数字(二分查找)
- 037-数字在排序数组中出现的次数(二分查找)
- 全排列
- 027-字符串的排列
- 动态规划
- 030-连续子数组的最大和
- 052-正则表达式匹配(我用的暴力)
- 回溯
- 065-矩阵中的路径(BFS)
- 066-机器人的运动范围(DFS)
- 排序
- 035-数组中的逆序对(归并排序)
- 029-最小的K个数(堆排序)
- 029-最小的K个数(快速排序)
- 位运算
- 011-二进制中1的个数
- 012-数值的整数次方
- 040-数组中只出现一次的数字
- 其他算法
- 002-替换空格
- 013-调整数组顺序使奇数位于偶数前面
- 028-数组中出现次数超过一半的数字
- 031-整数中1出现的次数(从1到n整数中1出现的次数)
- 032-把数组排成最小的数
- 033-丑数
- 041-和为S的连续正数序列(滑动窗口思想)
- 042-和为S的两个数字(双指针思想)
- 043-左旋转字符串(矩阵翻转)
- 046-孩子们的游戏-圆圈中最后剩下的数(约瑟夫环)
- 051-构建乘积数组
剑指offer刷题交流群
扫码添加微信,一定要备注研究方向+地点+学校+昵称(如机器学习+上海+上交+汤姆),只有备注正确才可以加群噢。
▲长按加群
相关文章推荐
- 每日算法题 | 剑指offer 二叉树专题 (16) 平衡二叉树
- 剑指offer-算法题练习:part20 二叉树的镜像
- 跟着专注于计算机视觉的AndyJ的妈妈我学算法之每日一题leetcode剑指Offer21调整数组顺序使奇数位于偶数前面
- 剑指offer代码解析——面试题19二叉树的镜像
- 剑指offer---二叉树的镜像---java实现
- 剑指Offer-19-二叉树的镜像
- 剑指offer-二叉树的镜像(C++递归与非递归)
- 剑指Offer-----------二叉树的镜像
- 剑指offer—二叉树的镜像
- 剑指Offer之面试题19:二叉树的镜像
- 剑指Offer:二叉树的镜像(一刷)
- 剑指Offer面试题19(Java版):二叉树的镜像
- 【剑指offer——JAVA实现】二叉树的镜像
- 剑指offer 二叉树镜像
- 递归和动态规划专题(一)----剑指offer+左程云算法
- 剑指offer题19_二叉树的镜像
- 14.剑指offer-判断一颗二叉树是否对称
- 【面试题】剑指Offer-19-二叉树的镜像
- 【剑指offer】第二十六题(树的子结构) 和 第二十七题(二叉树的镜像)
- 剑指offer之 二叉树镜像