应用题-二叉树专题-翻转二叉树

管理员
[翻转二叉树](https://leetcode.cn/problems/invert-binary-tree/description/) ## 题目描述 给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点。 翻转的含义:交换每个节点的左右子树。 **示例** ```text 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 4 4 / \ / \ 2 7 → 7 2 / \ / \ / \ / \ 1 3 6 9 9 6 3 1 ``` ```text 输入:root = [2,1,3] 输出:[2,3,1] 2 2 / \ → / \ 1 3 3 1 ``` ```text 输入:root = [] 输出:[] ``` ## 解题思路 对于二叉树的题目,解决思路基本就是二叉树的遍历模版,二叉树天然就是递归形成的,解题也是寻找递归(子问题)的过程。 **二叉树的定义** ```text 二叉树是 n(n ≥ 0) 个节点的有限集合,它满足: - 当 n = 0 时,称为空二叉树 - 当 n > 0 时,有且仅有一个节点称为根节点(Root) - 其余节点被分成两个互不相交的子集: 左子树(Left Subtree) 和 右子树(Right Subtree), 且这两个子集本身也都是二叉树 ``` **切入点** ```text 翻转二叉树 - 从根节点出发 将根节点的左右节点(记作A,B) 变化根节点的左右指向 此时变为B,A - 继续出发 B 和 A 上的每个节点 也执行相同的操作 - 此时 就实现了 翻转二叉树 ------ 总结 根节点左右节点翻转 并且左子树和右子树上每个节点翻转 ``` **解题代码** ```python # 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 None left = self.invertTree( root.left ) right = self.invertTree( root.right ) root.left = right root.right = left return root ``` **时间复杂度: `O(n)`** **空间复杂度: `O(h)`** n = 节点总数 h = 树的高度 ( 最坏情况`O(n)` 最好情况`O(log n)` )
评论 1

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
Hello
Hello 1 楼 2026-03-23 21:06
二叉树的题目 一大思考点 就是如何在遍历模版里加逻辑