例题
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述
二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5
思路
对我而言,第一眼看上去就像一道递归题。言归正传,所谓的镜像二叉树无非就是左右交换,你可以自顶向下地左右交换,也可以自底向上地左右交换。对我来说,可能自底向上地左右交换更好实现一些,那么我们就成功地将问题转化成了一道dfs题。如下图所示:先深度优先遍历交换子节点(递),而后向上交换父节点(归)。
代码
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回镜像树的根节点
def Mirror(self, root):
# write code here
if root is None:
return
return self.dfs(root) # dfs入口
def dfs(self, node):
if node is None:
return None
left_val = self.dfs(node.left) # 访问左节点
right_val = self.dfs(node.right) # 访问右节点
node.left, node.right = right_val, left_val # 交换左右节点
return node # 返回父节点