LeetCode | 0226. Invert Binary Tree翻转二叉树【Python】
LeetCode 0226. Invert Binary Tree翻转二叉树【Easy】【Python】【二叉树】【递归】
Problem
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
代码地址
最怕一生碌碌无为,还说平凡难能可贵。