Day18:二叉树的镜像
时间:2022-07-24
本文章向大家介绍Day18:二叉树的镜像,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
剑指Offer_编程题——二叉树的镜像
题目描述:
操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义为:源二叉树的层次遍历为8,10,6,11,9,7,5.
具体要求:
时间限制: C/C++ 1秒,其他语言2秒 空间限制: C/C++32M,其他语言64M
具体思路:
由于本题的本质就是考察二叉树,因此还是得用到递归的方法。其实本题就是将二叉树的左右子树进行交换即可。因此我们可以从根节点开始遍历,如果遍历的节点有子结点,就交换子结点,当交换为所有的非叶子节点的左右节点之后,即得到了树的镜像。接下来我们分别用java和python将其实现。 1、首先我们用java实现
public class Solution{
public void Mirror(TreeNode root){
if(root == null)
return;
if(root.left == null && root.right == null)
return;
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
if (root.left != null)
Mirror(root.left);
if(root.right != null)
Mirror(root.right);
}
}
代码效果图如图所示:
正如前面提到一样,牛客网已经为我们定义了节点,不需要我们重复定义,但是在自己的本地编译器中,我们需要定义节点TreeNode的类,具体实现如下:
public class TreeNode{
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val){
this.val = val;
}
}
2、接下来用python将其实现
class Solution:
def Mirror(self, root):
if root == None:
return
root.right, root.left = root.left, root.right
self.Mirror(root.left)
self.Mirror(root.right)
return root
代码效果图如图所示:
用python实现树结构:
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
总结
本道题主要考察树的简单应用,本题给出一个新的概念,树的镜像,其实就是将子树的左右结点进行交换,因此此题比较简单,难度系数较低,就是交换左右树即可,并且需要用到递归,不过需要注意的就是:在交换之前要先判断树是否为空的。这是目前遇到树的所有题中最简单的一道,因此,我们需要深刻掌握树的相关实现,尤其是二叉树,并且也要掌握数据结构相关的知识,只有这样,才能遇到综合性问题做到融会贯通,写出优质的代码。总之,我们要继续加油,争取早日找到工作,Good Luck!!!
- Python爬虫(十七)_糗事百科案例
- 上千亿巨头撑腰 双拼妥妥被他拿了
- Python爬虫(十八)_多线程糗事百科案例
- Python爬虫(十九)_动态HTML介绍
- Python爬虫(二十)_动态爬取影评信息
- Python爬虫(二十一)_Selenium与PhantomJS
- Python爬虫(十三)_案例:使用XPath的爬虫
- Python爬虫(十四)_BeautifulSoup4 解析器
- Python爬虫(十五)_案例:使用bs4的爬虫
- Python爬虫(十六)_JSON模块与JsonPath
- 多类好米齐交易:域名776.cn近10万元结拍
- Python爬虫(八)_Requests的使用
- Python爬虫(十一)_案例:使用正则表达式的爬虫
- Python爬虫(十二)_XPath与lxml类库
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Java】18 增强流
- 【Java】19 网络编程
- 【Java】20 基于 TCP 协议的网络编程
- 【Java】01 初识 Java
- 多张热图的排版技巧
- 【Java】02 数据类型与运算符
- StringBuilder/StringBuffer源码阅读笔记
- PAT (Advanced Level) Practice 1027 Colors in Mars (20 分)
- 【Java】21 基于 UDP 的网络编程
- PowerBI DAX 在矩阵分组区域内通用积累求和
- 【Java】22 网络连接
- 2015年ccf计算机职业认证资格考试第一题数列分段
- 数据结构题集(严书)查找 常见习题代码
- 翻车!居然在这里翻车了!!!
- PAT (Advanced Level) Practice 1029 Median (25分)