当前位置: 首页剑指offer刷题第七期问题详情 【二叉树专题】剑指 Offer 27. 二叉树的镜像 本问题对应课程链接:剑指offer刷题第七期 要求: 1、请打卡你的解题代码,如果能简单说一下思路则简单说一下思路。 2、给出你代码所用的时间复杂度和空间复杂度
共以下 23 个回答
递归
1、传入树根节点,传出翻转了左右子树的根节点
2、出口:根为空,直接返回
3、递归:左右子树交换,随后处理子树作为新的树根递归处理
时间O(N),空间O(N)
LCR 144. 翻转二叉树
题解
“`cpp
没有动脑
class Solution {
public:
TreeNode* flipTree(TreeNode* root) {
if(!root) return nullptr;
TreeNode* temp=root->left;
root->left=root->right;
root->right=temp;
flipTree(root->left);
flipTree(root->right);
return root;
}
};
“`cpp
简单的递归
方法 递归 直接从root的左右开始递归,递归函数体中交换左右 就能镜像
三部曲确实有用
time O(n) space O(n)
思路:递归思想,确认终止条件是叶子结点为null,然后分别对左右子树进行递归。时间空间复杂度都是O(N),要镜像就是要遍历所有节点
时间复杂度O(n),空间复杂度O(n)
class Solution {
public TreeNode flipTree(TreeNode root) {
if(root null){
return root;
}
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
flipTree(root.left);
flipTree(root.right);
return root;
}
}
时间:O(n)
空间:O(n)
递归反转二叉树
时间复杂度O(N),空间复杂度O(N)。
递归遍历每一个节点然后交换左右子树
On On
时间/空间o(n)
//时间复杂度O(N)
public TreeNode flipTree(TreeNode root) {
时间复杂度:O(n)
空间:树的高度
打卡,先交换再修改
时空复杂度O(n)
先交换,再递归修改
时间复杂度O(n)
空间复杂度O(n)
思路: 首先递归交换当前节点的左子树与右子树,之后将当前节点的左右子树信息交换
思路:递归(常规二叉树的递归方法)、迭代法(栈)
时间复杂度:两种方法的时间复杂度都是 O(n)。
空间复杂度:两种方法的空间复杂度都是 O(logn)(平均情况)或 O(n)(最坏情况)