- 思路:递归的交换左右子树
- 推出条件:左右子树都为None
- 难点:特殊情况如何处理
![image-20200728183326078](https://i-blog.csdnimg.cn/blog_migrate/914c0c5a264ac038d505b4a214b9eece.png)
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root:
return None
return self.recur(root)
def recur(self, root: TreeNode) -> TreeNode:
if not root.left and not root.right:
return root
if not root.left:
root.left = root.right
root.right = None
self.recur(root.left)
return root
elif not root.right:
root.right = root.left
root.left = None
self.recur(root.right)
return root
root.left, root.right = root.right, root.left
self.recur(root.left)
self.recur(root.right)
return root
前序遍历、层次遍历(用来验证结果)
def printTree(self, root):
my_seq = Queue()
my_seq.put(root)
while my_seq.qsize():
tmpNode = my_seq.get()
print(tmpNode.val)
if tmpNode.left:
my_seq.put(tmpNode.left)
if tmpNode.right:
my_seq.put(tmpNode.right)
def printTree(self, root):
if not root:
return
self.printTree(root.left)
print(root.val)
self.printTree(root.right)
完整代码
from queue import Queue
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 None
return self.recur(root)
def recur(self, root: TreeNode) -> TreeNode:
if not root.left and not root.right:
return root
if not root.left:
root.left = root.right
root.right = None
self.recur(root.left)
return root
elif not root.right:
root.right = root.left
root.left = None
self.recur(root.right)
return root
root.left, root.right = root.right, root.left
self.recur(root.left)
self.recur(root.right)
return root
def printTree(self, root):
if not root:
return None
my_seq = Queue()
my_seq.put(root)
while my_seq.qsize():
tmpNode = my_seq.get()
print(tmpNode.val)
if tmpNode.left:
my_seq.put(tmpNode.left)
if tmpNode.right:
my_seq.put(tmpNode.right)
if __name__ == '__main__':
sol = Solution()
root = [4, 2, 7, 1, 3, 6, 9]
my_test, my_test.left, my_test.left.left = TreeNode(4), TreeNode(2), TreeNode(7)
ans = sol.mirrorTree(my_test)
sol.printTree(ans)