请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
4
/ \
2 7
/ \ / \
1 3 6 9
镜像输出:
4
/ \
7 2
/ \ / \
9 6 3 1
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
1、题目分析
什么是镜像二叉树,就是交换每一个节点的左右子树,重构的二叉树就称之为原二叉树的镜像。遇到树的问题,两种解法:1、递归求解;2、辅助栈法
2、解题分析
- 递归法
- 判断如果根节点是空直接返回None
- 交换根节点的两个子树
- 递归的依次次交换这两个左右子树
- 辅助栈
- 初始化一个栈,将根节点添加到栈中
- 进入while循环(栈不为空)
- 弹出根节点
- 如果左子树存在,将左子树压入到栈中
- 如果右子树存在,将右子树压入栈中
- 交换两个左右子树
3、代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
#辅助栈法
if not root:
return []
stack = [root]
while stack:
node = stack.pop()
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
node.left,node.right = node.right,node.left
return root
#递归法
#交换左右两个子树
root.left,root.right = root.right,root.left
print(root.left,root.right)
#递归的交换两个子树
self.mirrorTree(root.left)
self.mirrorTree(root.right)
return root
总结:不管构建树还是遍历树,递归都是最优先的。
这题和反转二叉树一毛一样。