class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if root:
root.left = self.invertTree(root.right)
root.right = self.invertTree(root.left)
return root
# if root:
# root.left, root.right = self.invertTree(root.right), self.invertTree(root.left)
# return root
为什么注释与两行语法不同?
226。 反向二叉树
它演示了您可以使用对inverttree
的两个调用在赋值的RHS上定义元组,然后立即将元组解包到两个“目标”root.left
和root.right
中。 这和
a, b = 1, 2
是。。。的简称
a = 1
b = 2
无论如何,我可能更喜欢两个单独的赋值(但是请注意,显示的代码有一个bug;您需要一个临时变量来保存旧的左树),但是如果我试图减少重复,我可能会编写如下内容
root.left, root.right = (self.invertTree(x) for x in [root.right, root.left])
取而代之的是。
无论哪种方式,关键是要记住首先计算RHS,因此在为其中任何一种分配新值之前,使用旧值root.right
和root.left
。
两个赋值版本实际上需要第三个赋值才能正确:
if root:
old_left = root.left
root.left = self.invertTree(root.right)
root.right = self.invertTree(old_left)
return root
或者你可以做一些更对称的事情,不要“偏爱”一个任务而不是另一个。
if root:
# Right to left, left to right
new_left = self.invertTree(root.right)
new_right = self.invertTree(root.left)
root.left = new_left
root.right = new_right