题解 | #二叉树的镜像#
二叉树的镜像
https://www.nowcoder.com/practice/a9d0ecbacef9410ca97463e4a5c83be7
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param pRoot TreeNode类
# @return TreeNode类
#
class Solution:
def Mirror(self , pRoot: TreeNode) -> TreeNode:
# write code here
# 递归退出条件
if pRoot == None:
return None
# 递归找到左、右节点指针,
left = self.Mirror(pRoot.left)
right = self.Mirror(pRoot.right)
# 从根节点进行交换
pRoot.left = right
pRoot.right = left
return pRoot
因为我们需要将二叉树镜像,意味着每个左右子树都会交换位置,如果我们从上到下对遍历到的节点交换位置,但是它们后面的节点无法跟着他们一起被交换,因此我们可以考虑自底向上对每两个相对位置的节点交换位置,这样往上各个子树也会被交换位置。
自底向上的遍历方式,我们可以采用后序递归的方法。
具体做法:
- step 1:先深度最左端的节点,遇到空树返回,处理最左端的两个子节点交换位置。
- step 2:然后进入右子树,继续按照先左后右再回中的方式访问。
- step 3:再返回到父问题,交换父问题两个子节点的值。
剑指offer刷题笔记 文章被收录于专栏
24秋招剑指offer刷题的笔记
华为工作强度 1292人发布
