内部构件

2024-04-23 06:40:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图返回树的内部结构和内部结构列表的长度,以下是我目前得到的结果:

class Node:

    def __init__(self, item, left=None, right=None):

        self.item = item
        self.left = left
        self.right = right

    def internals(self):
        leaves = []
        internals = []
        if self.left == None and self.right == None:
            leaves.append(self.item)
        else:
            if self.left:
                itls = self.left.internals()
                internals.extend(itls)
            if self.right:
                itls = self.right.internals()
                internals.extend(itls)
            internals.append(self.item)
        return internals

if(__name__ == "__main__"):
    tree = Node(10,Node(3, Node(4)),Node(7, Node(8)))
    print(tree.internals())

它可以很好地返回内部的列表

示例:

    tree = Node(10,Node(3, Node(4)),Node(7, Node(8)))
    print(tree.internals())
    [3, 7, 10]

但是如果我试图返回列表的长度和内部列表,我的整个列表似乎都变形了,这就是我不确定发生了什么的地方。你知道吗

为了返回内部构件列表的长度,我刚刚将internals方法的最后一行更改为return internals,len(internals)

但是当我在树上调用这个方法时,它会返回内部的列表和列表的长度,但问题是不知怎么的,列表变形了,因此列表的长度也是错误的。你知道吗

    tree = Node(10,Node(3, Node(4)),Node(7, Node(8)))
    print(tree.internals())
    ([[[], 0, 3], 3, [[], 0, 7], 3, 10], 5)

不知道为什么会这样,所以我想知道是否有人能帮我解决这个问题。你知道吗


Tags: selfrightnonenodetree列表ifdef
1条回答
网友
1楼 · 发布于 2024-04-23 06:40:24

如果将列表的长度添加到递归调用中,则会导致递归调用的混乱。 这是一个有效的版本。我添加了一个额外的方法来调用递归方法。你知道吗

class Node:

    def __init__(self, item, left=None, right=None):

        self.item = item
        self.left = left
        self.right = right

    def internals_impl(self):
        leaves = []
        internals = []
        if self.left == None and self.right == None:
            leaves.append(self.item)
        else:
            if self.left:
                itls = self.left.internals_impl()
                internals.extend(itls)
            if self.right:
                itls = self.right.internals_impl()
                internals.extend(itls)
            internals.append(self.item)
        return internals

    def internals(self):
        nodes = self.internals_impl()
        return len(nodes),nodes  

if(__name__ == "__main__"):  

    tree = Node(10,Node(3, Node(4)),Node(7, Node(8)))
    print(tree.internals())

结果是:

(3, [3, 7, 10])

相关问题 更多 >