题目
翻转一棵二叉树。
示例:
输入:
输出:
解题思路
对每个结点的左右子树进行递归,直到传至叶子结点再一步步将翻转结果执行。
代码
# 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 root
left = self.invertTree(root.left)
right = self.invertTree(root.right)
root.left,root.right = right,left
return root
- 时间复杂度 O(N)
其中 N 为二叉树节点的数目。遍历二叉树中的每一个节点,对每个节点而言,在常数时间内交换其两棵子树。 - 空间复杂度 O(N)
使用的空间由递归栈的深度决定,它等于当前节点在二叉树中的高度。
(1)平均情况下,二叉树的高度与节点个数为对数关系,即 O(logN);
(2)最坏情况下,树形成链状,空间复杂度为 O(N)。
学习总结
- 二叉树的遍历递归,遍历每个结点,前向遍历的方法;
- 面向对象的类、方法的简单数据传递。