leetcode226题 题解 翻译 C语言版 Python版
2016-02-04 21:41
399 查看
226. Invert Binary Tree
Invert a binary tree.
to
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.
226.翻转二叉树
把一棵二叉树翻转(如图)
冷知识:
这个问题启迪于Max Howell的这个推文
谷歌:虽然我们90%的工程师用你写的软件(Homebrew),但你却不能在一却白板上翻转一个二叉树,所以滚蛋吧。
(Homebrew是Mac平台上的软件包管理器,作者是Max Howell,但Max Howell被谷歌拒绝聘用,原因是算法能力不行,所以他发了这条推文。)
思路:从图上看是要把每棵树的左右子树互换,所以可以用递归快速解决问题。对于任意一个结点,先将其左子树调用当前函数完成翻转,再将其右子树调用当前函数完成翻转。然后交换左右子树,返回这个结点即可。递归的终点是判断给的结点值是否为空,如果为空说明到达叶结点的子树了,直接返回空就行了。代码中可写的稍微简练些,先记录左子树,然后让右子树完成翻转后赋给左子树,左子树完成翻转后赋给右子树。Python中可直接两个变量一起赋值,无需记录。
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.
226.翻转二叉树
把一棵二叉树翻转(如图)
冷知识:
这个问题启迪于Max Howell的这个推文
谷歌:虽然我们90%的工程师用你写的软件(Homebrew),但你却不能在一却白板上翻转一个二叉树,所以滚蛋吧。
(Homebrew是Mac平台上的软件包管理器,作者是Max Howell,但Max Howell被谷歌拒绝聘用,原因是算法能力不行,所以他发了这条推文。)
思路:从图上看是要把每棵树的左右子树互换,所以可以用递归快速解决问题。对于任意一个结点,先将其左子树调用当前函数完成翻转,再将其右子树调用当前函数完成翻转。然后交换左右子树,返回这个结点即可。递归的终点是判断给的结点值是否为空,如果为空说明到达叶结点的子树了,直接返回空就行了。代码中可写的稍微简练些,先记录左子树,然后让右子树完成翻转后赋给左子树,左子树完成翻转后赋给右子树。Python中可直接两个变量一起赋值,无需记录。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ struct TreeNode* invertTree(struct TreeNode* root) { if (root == NULL) return NULL; struct TreeNode* left = root->left; root->left = invertTree(root->right); root->right = invertTree(left); return root; }
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def invertTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ if root == None: return None root.left, root.right = self.invertTree(root.right), self.invertTree(root.left) return root
相关文章推荐
- [CCF]201312-2 ISBN号码
- leetcode237题 题解 翻译 C语言版 Python版
- 一起talk C栗子吧(第一百二十回:C语言实例--线程属性)
- neuq oj 1007 计负均正 C++
- sublime3 + mingw + sublimeclang 搭建c++编译环境
- C语言编写—通讯录(小项目)
- struct和typedef struct彻底明白了
- 直接输出数组名的问题
- 让你提前认识软件开发(19):C语言中的协议及单元測试演示样例
- UVa 10340 All in All
- 1987年C语言乱码大赛之最优秀单行代码
- FastReport配置打印预览button_C++
- C++专项 第七讲:循环结构程序设计
- 动态栈的实现(C++)
- C语言实现哈夫曼编码
- C++判断一个数是否为整数
- C++无序元素直接排序法
- C++代码重构——从C global到C++ template
- C++将二叉树转为双向链表及判断两个链表是否相交
- hdu1097