Invert a binary tree.

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

to

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

Trivia:
This problem was inspired by this original tweet by Max Howell:

Google: 90% of our engineers use the software you wrote
(Homebrew), but you can’t invert a binary tree on a whiteboard so fuck
off.

 

这道题让我们翻转二叉树,是树的基本操作之一,不算难题。最下面那句话实在有些木有节操啊,不知道是Google说给谁的。反正这道题确实难度不大,可以用递归和非递归两种方法来解。先来看递归的方法,写法非常简洁,五行代码搞定,交换当前左右节点,并直接调用递归即可,代码如下:

// Recursion
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (!root) return NULL;
TreeNode *tmp = root->left;
root->left = invertTree(root->right);
root->right = invertTree(tmp);
return root;
}
};

非递归的方法也不复杂,跟二叉树的层序遍历一样,需要用queue来辅助,先把根节点排入队列中,然后从队中取出来,交换其左右节点,如果存在则分别将左右节点在排入队列中,以此类推直到队列中木有节点了停止循环,返回root即可。代码如下:

// Non-Recursion
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (!root) return NULL;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode *node = q.front(); q.pop();
TreeNode *tmp = node->left;
node->left = node->right;
node->right = tmp;
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
return root;
}
};

LeetCode All in One 题目讲解汇总(持续更新中...)

最新文章

  1. 【转】eclipse下使用hibernate tools实现hibernate逆向工程
  2. 关于后台数据库正常存储中文通过Ajax方式传递到前台变成问号的处理
  3. jade初学
  4. github+hexo搭建自己的博客网站(六)进阶配置(搜索引擎收录,优化你的url)
  5. SpringBoot返回date日期格式化,解决返回为TIMESTAMP时间戳格式或8小时时间差
  6. 测试常用Linux命令
  7. H5利用pattern属性和oninvalid属性验证表单
  8. ACC自适应巡航控制系统介绍
  9. saltstack 基本的批量操作
  10. 【leetcode】441. Arranging Coins
  11. zmq setsockopt()
  12. 【Java基础】4、java中的内部类
  13. 监控.net 网站 Glimpse
  14. 前台返回json数据的常用方式+常用的AJAX请求后台数据方式
  15. Codeforces787D(SummerTrainingDay06-D 线段树+最短路)
  16. (线段树模板)A Simple Problem with Integers --POJ--3468
  17. Python IDLE快捷键【转载合集】
  18. python 计算字典value值的和
  19. JavaScript 数组-Array的方法总结
  20. datetime时间处理

热门文章

  1. docker进入后台运行的容器
  2. jQuery-1.9.1源码分析系列(十六)ajax——jsonp原理
  3. “NOSQL” 杂谈
  4. 【原创】Kafka Consumer多线程实例
  5. 《连载 | 物联网框架ServerSuperIO教程》- 11.实现设备(驱动)与设备(驱动)交互和级联控制。注:设备驱动模拟金三与普京的对话
  6. 面向对象设计模式纵横谈:Singelton单件模式(笔记记录)
  7. Mybatis框架的模糊查询(多种写法)、删除、添加(四)
  8. 基于JQuery的获取鼠标进入和离开容器方向的实现
  9. kmdjs和循环依赖
  10. 如何使用VS在SharePont 2013中插入ashx文件