题目
226.翻转二叉树
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。、
示例 1:
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
示例 2:
输入:root = [2,1,3] 输出:[2,3,1]
示例 3:
输入:root = [] 输出:[]
提示:
- 树中节点数目范围在
[0, 100]
内 -100 <= Node.val <= 100
思路
遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。
注意只要把每一个节点的左右孩子翻转一下,就可以达到整体翻转的效果
这道题目使用前序遍历和后序遍历都可以,唯独中序遍历不方便,因为中序遍历会把某些节点的左右孩子翻转了两次
这里还是采取迭代遍历的方式进行,需要将每层的节点存到一个队列里,然后遍历每层中所有的节点,交换左右节点,再将节点的左右子树保存到队列里,供下一层使用
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return root
myqueue = collections.deque()
myqueue.append(root)
while myqueue:
for _ in range(len(myqueue)):
temp = myqueue.popleft()
temp.left,temp.right = temp.right,temp.left
if temp.left:
myqueue.append(temp.left)
if temp.right:
myqueue.append(temp.right)
return root