大牛没有能做出来的题,我们要好好做一做

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.

递归解决方案:

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* invertTree(TreeNode* root)
{
if(root ==NULL) return root;
TreeNode* node = invertTree(root->left);
root->left = invertTree(root->right);
root->right = node;
return root;
}
};

非递归解决方案:

 TreeNode* invertTree(TreeNode* root)
{
if(root == NULL)return NULL;
vector<TreeNode*> stack;
stack.push_back(root);
while(!stack.empty())
{
TreeNode* node = stack.back();// or stack.top()
stack.pop_back();
swap(node->left,node->right);
if(node->left)stack.push_back(node->left);
if(node->right)stack.push_back(node->right);
}
return root;
}

python:

def invertTree(self, root):
if root:
root.left, root.right = self.invertTree(root.right), self.invertTree(root.left)
return root Maybe make it four lines for better readability: def invertTree(self, root):
if root:
invert = self.invertTree
root.left, root.right = invert(root.right), invert(root.left)
return root -------------------------------------------------------------------------------- And an iterative version using my own stack: def invertTree(self, root):
stack = [root]
while stack:
node = stack.pop()
if node:
node.left, node.right = node.right, node.left
stack += node.left, node.right
return root
def invertTree(self, root):
if root is None:
return None
root.left, root.right = self.invertTree(root.right), self.invertTree(root.left)
return root

python非递归解决方案:

DFS version:

def invertTree(self, root):
if (root):
self.invertTree(root.left)
self.invertTree(root.right)
root.left, root.right = root.right, root.left
return root BFS version: def bfs_invertTree(self, root):
queue = collections.deque()
if (root):
queue.append(root) while(queue):
node = queue.popleft()
if (node.left):
queue.append(node.left)
if (node.right):
queue.append(node.right)
node.left, node.right = node.right, node.left return root

最新文章

  1. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结
  2. 数据库服务器CPU持续百分之百、部分Session一直处于执行状态---等待事件为:asynch descriptor resize(Oracle Bug )
  3. Apple II DOS 源代码发布
  4. JS的跳转
  5. Deployment Pipeline using Docker, Jenkins, Java
  6. HTML5实战教程———开发一个简单漂亮的登录页面
  7. XE10 Seattle error___seh_personality_v0
  8. 你用哪种工具进行iOS app自动化功能测试?
  9. python 下的数据结构与算法---8:哈希一下【dict与set的实现】
  10. OTCL的多继承
  11. poj 3335 /poj 3130/ poj 1474 半平面交 判断核是否存在 / poj1279 半平面交 求核的面积
  12. fork与vfork详解
  13. iOS开发之清除缓存
  14. Web开发学习之路--Springmvc+Hibernate之初体验
  15. UNIX环境高级编程——信号(API)
  16. how tomcat works读书笔记 七 日志记录器
  17. TypeSrcript如何引入第三方库 如果加d.ts以及async await如何使用 demo,只有代码,文字后续补充
  18. Directshow 采集与FFDshow 冲突
  19. django admin自定义
  20. yii验证系统学习记录,基于yiicms(一)写的太长了,再写一篇(二)

热门文章

  1. NVIDIA Titan Xp Star Wars Collector&#39;s Edition显卡深度学习工作站 + Ubuntu17.10 + Tensorflow-gpu + Anaconda3 + Python 3.6 设置
  2. Python 头部 #!/usr/bin/python 和 #!/usr/bin/env 的区别
  3. Lintcode391 Number of Airplanes in the Sky solution 题解
  4. js保留两位小数数字
  5. ZOJ-2965
  6. CRM客户关系管理系统(七)
  7. 在Spring Boot中输出REST资源
  8. Programming In Scala笔记-第四章、类和对象
  9. 【SSH系列】初识spring+入门demo
  10. Android 访问assets下的文件