美文网首页LeetCode个人题解
LeetCode | 0226. Invert Binary T

LeetCode | 0226. Invert Binary T

作者: Wonz | 来源:发表于2020-03-19 22:06 被阅读0次

    LeetCode 0226. Invert Binary Tree翻转二叉树【Easy】【Python】【二叉树】【递归】

    Problem

    LeetCode

    Invert a binary tree.

    Example:

    Input:

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

    Output:

         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 f*** off.

    问题

    力扣

    翻转一棵二叉树。

    示例:

    输入:

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

    输出:

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

    备注:
    这个问题是受到 Max Howell 原问题 启发的 :

    谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

    思路

    解法一

    递归

    前序遍历二叉树,如果当前节点有子树,就交换左右子树。
    
    Python3代码
    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def invertTree(self, root: TreeNode) -> TreeNode:
            # solution one: 递归
            if not root:
                return None
            # 叶子节点,直接返回自己
            if not root.left and not root.right:
                return root
            
            # 交换非叶子节点的左右两棵子树
            root.left, root.right = root.right, root.left
            if root.left:
                self.invertTree(root.left)
            if root.right:
                self.invertTree(root.right)
            return root
    
    解法二

    用栈模拟二叉树。
    
    Python3代码
    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def invertTree(self, root: TreeNode) -> TreeNode:
            # solution two: 栈
            if not root:
                return None
            # 叶子节点,直接返回自己
            if not root.left and not root.right:
                return root
            
            # 栈模拟二叉树
            stack = [root]
            while stack:
                node = stack.pop()
                if node:
                    node.left, node.right = node.right, node.left
                    stack.append(node.right)
                    stack.append(node.left)
            return root
    

    代码地址

    GitHub链接

    相关文章

      网友评论

        本文标题:LeetCode | 0226. Invert Binary T

        本文链接:https://www.haomeiwen.com/subject/qwpryhtx.html