题目:
操作给定的二叉树,将其变换为源二叉树的镜像。
比如: 源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
二叉树:每个结点的度(子节点的个数)最多为二,且区分左结点和右结点。
二叉树的镜像实际上就是交换每个结点的左右子结点/子树。很容易就能想到递归的思想,但是难在了递归中最简单情况的设置。
刚开始我认为最简单的情况应该是左右结点都是叶节点时,直接交换左右结点,但是这种情况的判别很复杂,尤其是当左右结点的某一个缺失时,总是报错...
无奈翻看讨论区发现,最简单的情况其实是参数为空时,返回None,参数不为空时,递归调用Mirror方法。
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param pRoot TreeNode类
# @return TreeNode类
#
class Solution:
def isLeaf(self, node):
if node.right == None and node.right == None:
return True
def Mirror(self , pRoot ):
# write code here
if pRoot == None:
return None
else:
mid = pRoot.left
pRoot.left = self.Mirror(pRoot.right)
pRoot.right = self.Mirror(mid)
return pRoot