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!!!