面试题27.二叉树的镜像
题目
求二叉树的镜像,即翻转一棵二叉树。验证是否反转可参考110/111题。
解题思路
1. BFS-层次遍历
可以使用广度优先搜素,层次遍历每个节点,交换节点的左右子节点,若左/右子节点不为None,则添加到Queue中进行下一次的搜索。
code:BFS
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
#BFS
from collections import deque
if not root: return None #special case
que = deque()
que.append(root)
while que:
cur = que.pop()
cur.right, cur.left = cur.left, cur.right#交换节点
if cur.left: que.append(cur.left)#添加到queue
if cur.right: que.append(cur.right)
return root
2.DFS-先序遍历
可以使用深度优先搜索进行先序遍历,即先处理当前节点:将当前节点的左右子节点交换,若左/右子节点不为None,再对左右子节点进行DFS.
code:DFS
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
#DFS
if not root: return None
def DFS(root):
if not root:return
root.right, root.left = root.left,root.right
if root.left:
DFS(root.left)
if root.right:
DFS(root.right)
DFS(root)
return root