[Lc]面试题27二叉树的镜像
Contents
题目
题解
二叉树结构如下:
//Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
1. 递归法
这个方法就是递归的翻转左右子树,若遇到空子树直接返回,然后当前节点的左子树变为翻转后的右子树,右子树变为翻转后的左子树,用tmp节点辅助。
- 时间复杂度$O(n)$
- 空间复杂度$O(n)$
class Solution {//两个方法。1.递归法
public:
TreeNode* mirrorTree(TreeNode* root) {
if(!root) return root;//为空直接返回
auto tmp = root->left;
root->left = mirrorTree(root->right);
root->right = mirrorTree(tmp);//递归的翻转左右节点
return root;
}
};
2. 队列迭代法(层次遍历)
用层次遍历的顺序挨个翻转所有节点的左右子树
- 时间复杂度$O(n)$
- 空间复杂度$O(n)$
class Solution {//两个方法。2.队列迭代法
public:
TreeNode* mirrorTree(TreeNode* root) {
if(!root) return root;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
auto cur = q.front(); q.pop();
auto tmp = cur->left;
cur->left = cur->right;
cur->right = tmp;
if(cur->left) q.push(cur->left);
if(cur->right) q.push(cur->right);
}
return root;
}
};
Author ChrisHRZ
LastMod 2020-05-16