题目

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

例如输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

镜像输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

示例 1:

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

限制:

0 <= 节点个数 <= 1000

本题同【LeetCode】226. 翻转二叉树

思路一:递归

自底向上。

代码

时间复杂度:O(n)

空间复杂度:O(n)

class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if (!root || (!root->left && !root->right)) return root;
root->left = mirrorTree(root->left);
root->right = mirrorTree(root->right);
TreeNode *tmp = root->left;
root->left = root->right;
root->right = tmp;
return root;
}
};

另一种写法

自顶向下。

时间复杂度:O(n)

空间复杂度:O(n)

class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if (root) {
TreeNode *tmp = root->left;
root->left = root->right;
root->right = tmp;
root->left = mirrorTree(root->left);
root->right = mirrorTree(root->right);
}
return root;
}
};

化简

class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if (root) {
TreeNode *tmp = root->left;
root->left = mirrorTree(root->right);
root->right = mirrorTree(tmp);
}
return root;
}
};

思路二:迭代

层次遍历。

时间复杂度:O(n)

空间复杂度:O(n)

代码

class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if (root) {
queue<TreeNode*> que;
que.push(root);
while (!que.empty()) {
TreeNode *node = que.front();
que.pop();
TreeNode *tmp = node->left;
node->left = node->right;
node->right = tmp;
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
}
}
return root;
}
};

最新文章

  1. 移动WEB开发之viewport
  2. Oracle12c IMO 测试
  3. js小知识归纳(待续)
  4. SVN-简要说明
  5. [JAVA] java_实例 获得系统字体
  6. uva 297 quadtrees——yhx
  7. MvcPager分页控件的使用
  8. 14款经典的MySQL客户端软件
  9. [BZOJ 1044] [HAOI2008] 木棍分割 【二分 + DP】
  10. Tab页签切换
  11. 帝国cms &lt;!--list.var1--&gt;,&lt;!--list.var2--&gt;的终极用法
  12. 团队项目(spring会议)
  13. sqlDependency监控数据库数据变化,自动通知
  14. 已有模板与tp框架结合
  15. PAT乙级-1043. 输出PATest(20)
  16. Django REST framework--序列化
  17. JS防抖与节流函数封装
  18. coursera-斯坦福-机器学习-吴恩达-笔记week2
  19. Pycharm2018的激活方法或破解方法(必须加host)
  20. mybatis源码解析5---SqlSession解析

热门文章

  1. 用C/C++创建windows服务程序
  2. 【PAT甲级】1011 World Cup Betting (20 分)
  3. 谁才是天朝最厉害的演员?让Python来为你揭晓!
  4. Java8 HashMap详解
  5. 那些年我们踩过的坑,SQL 中的空值陷阱!
  6. 【剑指Offer面试编程题】题目1390:矩形覆盖--九度OJ
  7. Django:使用django自带的登录模块登录后会默认登录到 /accounts/profile 下的问题
  8. 三、java基础-方法含义_重载_递归
  9. 图解IDEA中配置Maven并创建Maven的Web工程
  10. Sqlserver 基本面试题