描述
操作给定的二叉树,将其变换为源二叉树的镜像。
比如: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5
不确定两者有什么关系,先试着把他们的三种遍历顺序写出来。
源二叉树:
①前序:8 6 5 7 10 9 11
②中序:5 6 7 8 9 10 11
③后序:5 7 6 9 11 10 8
镜像二叉树:
①前序:8 10 11 9 6 7 5
②中序:11 10 9 8 7 6 5
③后序:11 9 10 7 5 6 8
这样看下来的话,源二叉树的前序反过来是镜像二叉树的后序,源二叉树的中序反过来是镜像二叉树的中序,源二叉树的后序反过来是镜像二叉树的前序。
之前的第4题根据前序和后序重建二叉树,那么用源二叉树的后序反过来加上源二叉树的中序反过来,就能重建除镜像二叉树。
看看讨论组的方法是什么?厉害,代码都好短!
class Solution:
def Mirror(self , pRoot ):
if pRoot:
right = self.Mirror(pRoot.left)
left = self.Mirror(pRoot.right)
pRoot.right = right
pRoot.left = left
return pRoot
class Solution:
def Mirror(self, pRoot):
if not pRoot:
return None
l, r = pRoot.left, pRoot.right
pRoot.left = self.Mirror(r)
pRoot.right = self.Mirror(l)
return pRoot
思路是先遍历左子树,交换左右孩子,然后遍历右子树,交换左右孩子,类似于后序遍历。