剑指 Offer 27. 二叉树的镜像 题解
Posted GTAlgorithm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 27. 二叉树的镜像 题解相关的知识,希望对你有一定的参考价值。
剑指 Offer 27. 二叉树的镜像 题解
解法1:递归
思路:
通过题目我们发现,二叉树的镜像就是通过交换原二叉树中所有结点的左子树和右子树变换而成的,因此我们就需要编码来实现这种交换过程。
递归到当前结点为NULL
时返回,实现函数swap
用于交换根结点的左右子树。
代码:
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if(root == NULL) return NULL;
swap(root->left, root->right);
mirrorTree(root->left);
mirrorTree(root->right);
return root;
}
};
复杂度分析:
时间复杂度 :建立二叉树镜像需要遍历树的所有节点,需要 时间。
空间复杂度 :最差情况下(当二叉树退化为链表),递归时系统需使用 大小的栈空间。
解法2:栈迭代
思路:
循环结束条件是栈为空,利用栈结构,实现交换栈顶结点的左右子树。
代码:
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
stack<TreeNode*> s;
s.push(root);
while(!s.empty()) {
TreeNode* node = s.top();
s.pop();
if(node == NULL) continue;
swap(node->left, node->right);
s.push(node->left);
s.push(node->right);
}
return root;
}
};
复杂度分析:
时间复杂度 :建立二叉树镜像需要遍历树的所有节点,需要 时间
空间复杂度 :最差情况下(当为满二叉树时),栈最多同时存储 个节点,占用 额外空间
作者:真歆
以上是关于剑指 Offer 27. 二叉树的镜像 题解的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 27. 二叉树的镜像无取巧解法,易于理解!
剑指 Offer 27. 二叉树的镜像无取巧解法,易于理解!
算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)