【LeetCode 二叉树专项】翻转二叉树(226)

1. 题目

给定一个二叉树的根结点 root ,要求翻转该二叉树并返回新的根结点。

1.1 示例

  • 示例 1 1 1
  • 输入: root = [4, 2, 7, 1, 3, 6, 9]
  • 输出: [4, 7, 2, 9, 6, 3, 1]

在这里插入图片描述

  • 示例 2 2 2
  • 输入: root = [2, 1, 3]
  • 输出: [2, 3, 1]

在这里插入图片描述

  • 示例 3 3 3
  • 输入: root = []
  • 输出: []

1.2 说明

1.3 限制

  • 树中结点数量范围 [ 0 , 100 ] [0, 100] [0,100]
  • -100 <= Node.val <= 100

1.4 进阶

2. 解法一(深度优先遍历)

2.1 分析

此题使用深度优先遍历的方式很简单即可实现,即只要把二叉树上的每一个节点的左右子节点进行交换,最后的结果就是完全翻转之后的二叉树。

2.2 解答

from collections import deque


class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


class Solution:
    def _invert_tree(self, root: TreeNode):
        if root:
            self._invert_tree(root.left)
            self._invert_tree(root.right)
            root.left, root.right = root.right, root.left

    def invert_tree(self, root: TreeNode) -> TreeNode:
        self._invert_tree(root)
        return root


def bfs_traverse(root: TreeNode):
    visiting = deque((root,))
    nodes = []
    while visiting:
        node = visiting.popleft()
        if node is not None:
            nodes.append(node.val)
            visiting.append(node.left)
            visiting.append(node.right)
    return nodes


def main():
    node7 = TreeNode(9)
    node6 = TreeNode(6)
    node5 = TreeNode(3)
    node4 = TreeNode(1)
    node3 = TreeNode(7, node6, node7)
    node2 = TreeNode(2, node4, node5)
    node1 = TreeNode(4, node2, node3)
    root = node1
    sln = Solution()
    print(bfs_traverse(root))  # [4, 2, 7, 1, 3, 6, 9]
    print(bfs_traverse(sln.invert_tree(root)))  # [4, 7, 2, 9, 6, 3, 1]


if __name__ == '__main__':
    main()

2.3 复杂度

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1) ,因为未使用额外的空间。

3. 解法二(广度优先遍历)

3.1 分析

3.2 解答

3.3 复杂度

猜你喜欢

转载自blog.csdn.net/weixin_37780776/article/details/121095967
今日推荐