为什么调用此方法时得到 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
我想编写方法 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