提问者:小点点

python语法有什么区别,有一行和两行? [副本]


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。 反向二叉树


共1个答案

匿名用户

它演示了您可以使用对inverttree的两个调用在赋值的RHS上定义元组,然后立即将元组解包到两个“目标”root.leftroot.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.rightroot.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