题目描述:翻转一棵二叉树。
示例:
输入:
4
/ \ 2 7 / \ / \ 1 3 6 9
输出:
4
/ \ 7 2 / \ / \ 9 6 3 1
- 题解:
仔细审题得话,可以发现无论怎么操作,始终都是要遍历每一个节点,也就是说复杂度为 O(n)。
二叉树的遍历方法有两类:
- 深度优先遍历 - DFS(Depth First Search)
- 广度优先遍历 - BFS(Breadth First Search)
引用[1]内有话说得很形象:沿着一条路进行深入探索,发现走到头再寻找其他出路得方式就叫深度优先遍历,这种向前回溯的方式很符合栈的先入后出特性,相互结合即可实现深度优先遍历算法。
层层遍历的方式与队列先进先出的特性结合起来可实现广度优先算法,每一层遍历的方式均与上一层相同,是一个迭代的过程。
- 深度遍历该二叉树,然后交换其左右节点
```python
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: if root is None: return root
right = self.invertTree(root.right)
left = self.invertTree(root.left)
root.left, root.right = right, left
return root
2. 采用广度优先的方式来遍历该二叉树,并逐个交换左右节点
```python
# 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:
if root is None:
return root
queue = [root]
while queue:
cur_node = queue.pop(0)
cur_node.left, cur_node.right = cur_node.right, cur_node.left
if cur_node.left is not None:
queue.append(cur_node.left)
if cur_node.right is not None:
queue.append(cur_node.right)
return root
引用:
[1]. 漫画:深度优先遍历 和 广度优先遍历