leetcode226题 题解 翻译 C语言版 Python版

226. Invert Binary Tree

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值