0

所以我写了一个代码,它应该在树中获取给定节点的父节点。这是伪代码。从根源出发,

def parent(self, child): 
    if right child exists:
        if the right child == child:
            return self
        else: self.right.parent(child)
    if left child exists:
        if the left child == child:
            print('f')
            return self
        else: self.left._get_parent(node)

我一遍又一遍地遇到这个问题。对于if the left child == child:语句,如果函数if找到the left child == child或,则进入该语句the right child == child

但是,return 语句不执行此操作。我知道这一点,因为当我在它之后写if the left child == child:和写print('f')时,它确实 print f,但是,它没有 return self。有谁知道为什么,任何人都可以就如何解决这个问题给出解决方案?

此外,有谁知道如何一次返回两个语句而不是元组或列表?例如,如果我想返回 1 和 2,

def x(n):
    return 1, 2

这将返回(1, 2).. 有没有办法不将其作为元组返回?只是为了正常返回。我问这个是因为在递归方面,我想在 1 AS WELL AS 2 上调用相同的函数,而不是在 tuple 上(1, 2)

4

1 回答 1

2

您的代码会丢弃else:分支中递归调用的返回值。您需要更多return陈述:

if right child exists:
    if the right child == child:
        return self
    else: 
        return self.right.parent(child)
if left child exists:
    if the left child == child:
        print('f')
        return self
    else:
        return self.left._get_parent(node)

在 Python 中,表达式1, 2创建一个元组,这是从函数返回多个值的规范方式。通过返回一个元组,这就是多值返回的工作方式。

只需解压返回值:

def foo():
   return 1, 2

value1, value2 = foo()

或使用索引:

values = foo()
values[0], values[1]
于 2013-04-05T15:40:07.850 回答