文章目录
1. 题目
给定一个二叉树的根结点 root
,要求翻转该二叉树并返回新的根结点。
1.1 示例
- 示例 1 1 1:
- 输入:
root = [4, 2, 7, 1, 3, 6, 9]
- 输出:
[4, 7, 2, 9, 6, 3, 1]
- 示例 2 2 2:
- 输入:
root = [2, 1, 3]
- 输出:
[2, 3, 1]
- 示例 3 3 3:
- 输入:
root = []
- 输出:
[]
1.2 说明
- 来源: 力扣(LeetCode)
- 链接: https://leetcode-cn.com/problems/invert-binary-tree
1.3 限制
- 树中结点数量范围 [ 0 , 100 ] [0, 100] [0,100] ;
-100 <= Node.val <= 100
。
1.4 进阶
2. 解法一(深度优先遍历)
2.1 分析
此题使用深度优先遍历的方式很简单即可实现,即只要把二叉树上的每一个节点的左右子节点进行交换,最后的结果就是完全翻转之后的二叉树。
2.2 解答
from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def _invert_tree(self, root: TreeNode):
if root:
self._invert_tree(root.left)
self._invert_tree(root.right)
root.left, root.right = root.right, root.left
def invert_tree(self, root: TreeNode) -> TreeNode:
self._invert_tree(root)
return root
def bfs_traverse(root: TreeNode):
visiting = deque((root,))
nodes = []
while visiting:
node = visiting.popleft()
if node is not None:
nodes.append(node.val)
visiting.append(node.left)
visiting.append(node.right)
return nodes
def main():
node7 = TreeNode(9)
node6 = TreeNode(6)
node5 = TreeNode(3)
node4 = TreeNode(1)
node3 = TreeNode(7, node6, node7)
node2 = TreeNode(2, node4, node5)
node1 = TreeNode(4, node2, node3)
root = node1
sln = Solution()
print(bfs_traverse(root)) # [4, 2, 7, 1, 3, 6, 9]
print(bfs_traverse(sln.invert_tree(root))) # [4, 7, 2, 9, 6, 3, 1]
if __name__ == '__main__':
main()
2.3 复杂度
- 时间复杂度: O ( n ) O(n) O(n) ;
- 空间复杂度: O ( 1 ) O(1) O(1) ,因为未使用额外的空间。