题目:
剑指 Offer 27、二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
镜像输出:
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
限制:
0 <= 节点个数 <= 1000
题解思路:
利用栈(或队列)遍历树的所有节点 node ,并交换每个 node 的左 / 右子节点。
算法流程:
特例处理: 当 root 为空时,直接返回 null;
初始化: 栈(或队列),本文用栈,并加入根节点 root 。
循环交换: 当栈 stack 为空时跳出;
出栈: 记为 node ;
添加子节点: 将 node 左和右子节点入栈;
交换: 交换 node 的左 / 右子节点。
返回值: 返回根节点 root 。
复杂度分析:
时间复杂度 O(N) : 其中 N 为二叉树的节点数量,建立二叉树镜像需要遍历树的所有节点,占用 O(N) 时间。
空间复杂度 O(N) : 最差情况下(当为满二叉树时),栈 stack 最多同时存储 N/2 个节点,占用 O(N) 额外空间。
题解python代码:
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root:
return
s = [root]
while s:
node = s.pop()
if node.left:
s.append(node.left)
if node.right:
s.append(node.right)
node.left, node.right = node.right, node.left
return root
作者:jyd
链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/solution/mian-shi-ti-27-er-cha-shu-de-jing-xiang-di-gui-fu-/
来源:力扣(LeetCode)https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/