为什么调用此方法时得到 None?

Why I get None when calling this method?

我想编写方法 mirror() 创建和 return 二叉树,其中所有左子树都变成右子树,反之亦然。我试图用递归来做到这一点:

def mirror(self):
    if self.left == None and self.right == None:
        return
    elif self.left == None and self.right != None:
        t = self.right
        self.right = self.left
        self.left = t
        self.left.mirror()
    elif self.left != None and self.right == None:
        t = self.right
        self.right = self.left
        self.left = t
        self.right.mirror()
    else:
        t = self.right
        self.right = self.left
        self.left = t
        self.left.mirror()
        self.right.mirror()

但我得到输出 None。为什么,以及如何解决它?

您当前的函数就地交换所有分支;没有特别需要 return 树,因为如果您首先设法调用该方法,那么您已经有了对它的引用。但是如果你想要 return 这样的参考,你可以:

def mirror(self):
    if self.left == None and self.right == None:
        <b>pass</b>
    elif self.left == None and self.right != None:
        t = self.right
        self.right = self.left
        self.left = t
        self.left.mirror()
    elif self.left != None and self.right == None:
        t = self.right
        self.right = self.left
        self.left = t
        self.right.mirror()
    else:
        t = self.right
        self.right = self.left
        self.left = t
        self.left.mirror()
        self.right.mirror()
    <b>return self</b></pre>

或更简单地说:

def mirror(self):
    if self.left is not None:
        self.left.mirror()
    if self.right is not None:
        self.right.mirror()
    self.left, self.right = self.right, self.left
    return self

另一方面,如果您想要一棵独立于原始树的 new 树,则需要构造一个 return.

def mirror(self):
    new_tree = ...  # Whatever you do to create a root node from the root of self

    # If the child pointers aren't already None after creating the node
    new_tree.left = None
    new_tree.right = None

    if self.right is not None:
        new_tree.left = self.right.mirror()
    if self.left is not None:
        new_tree.right = self.left.mirror()

    return new_tree