力扣Hot100--226.翻转二叉树
力扣Hot100–226.翻转二叉树
要求:给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
用层序遍历的思想:
1、从队列中取出当前节点(使用 popleft()确保先进先出)
2、交换该节点的左右子树:node.left, node.right = node.right, node.left
3、如果左子树不为空,将其加入队列(等待后续处理)
4、如果右子树不为空,将其加入队列(等待后续处理)
代码:
# 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 root is None:return Nonequeue = deque([root])while queue:size = len(queue)for _ in range(size):node = queue.popleft()node.left,node.right=node.right,node.leftif node.left:queue.append(node.left)if node.right:queue.append(node.right)return root
用递归–前序遍历方法:
class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:def swapTree(node):if node is None:return Nonenode.left,node.right=node.right,node.leftif node.left:swapTree(node.left)if node.right:swapTree(node.right)return rootresult = swapTree(root)return result
用递归–后序遍历方法:
class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:def swapTree(node):if node is None:return Noneif node.left:swapTree(node.left)if node.right:swapTree(node.right)node.left,node.right=node.right,node.leftreturn rootresult = swapTree(root)return result
用递归–中序遍历方法:
class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:def swapTree(node):if node is None:return Noneif node.left:swapTree(node.left)node.left,node.right=node.right,node.leftif node.left:swapTree(node.left)return rootresult = swapTree(root)return result