LeetCode 226. 翻转二叉树

226. 翻转二叉树

Difficulty: 简单

翻转一棵二叉树。

示例:

输入:

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

输出:

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

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

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

Solution

Language: 全部题目

最近这几道题都是BFS+队列解决的,有点感觉了。

# 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:
        if not root: return None
        queue = [root]
        
        while queue:
            size = len(queue)
            for i in range(size):
                node = queue.pop()
                if node:
                    node.left, node.right = node.right, node.left
                    queue.append(node.left)
                    queue.append(node.right)
        
        return root

解法二:基于DFS+stack的解法。

class Solution:
    def invertTree(self, root: TreeNode) -> TreeNode:
        if not root: return None
        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
posted @ 2020-12-01 22:44  swordspoet  阅读(63)  评论(0编辑  收藏  举报