LeetCode #226 翻转二叉树 树 递归

LeetCode #226 翻转二叉树

题目描述

翻转一棵二叉树。

示例:

输入:

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

输出:

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

方法一:递归

每次递归交换左右子树

# 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:
        # 这里不写可能导致13行nonetype object
        if root is None: return None

        temp = root.left
        root.left = self.invertTree(root.right)
        root.right = self.invertTree(temp)
        
        return root
  • 时间复杂度: O ( N ) O(N)
  • 空间复杂度: O ( N ) O(N)

方法二:迭代

类似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:
        stack = [root]

        while stack:
            curr = stack.pop()
            if curr:
                curr.left, curr.right = curr.right, curr.left
                stack.append(curr.left)
                stack.append(curr.right)
        return root    
  • 时间复杂度: O ( N ) O(N)
  • 空间复杂度: O ( N ) O(N)
发布了67 篇原创文章 · 获赞 2 · 访问量 1373

猜你喜欢

转载自blog.csdn.net/weixin_42511320/article/details/105090948