0

我想返回二叉树中的值列表。有没有更短更有效的方法来编写数字方法?

谢谢你。

class BTNode(object):
    """A node in a binary tree."""

    def __init__(self, item, left=None, right=None):
        """(BTNode, object, BTNode, BTNode) -> NoneType
        Initialize this node to store item and have children left and right,
        as well as depth 0.
        """
        self.item = item
        self.left = left
        self.right = right
        self.depth = 0  # the depth of this node in a tree

    def number(self) -> list:
        lst = []

        if self.right is None and self.left is None:
            lst.append(self.item)
        else:
            lst.append(self.item)
        if self.left:
            left = self.left.number()
            lst.extend(left)
        if self.right:
            right = self.right.number()
            lst.extend(right)
        return lst
4

2 回答 2

3

如果您不介意生成器而不是列表,则可以非常整洁地编写代码。

def number(self):
    yield self.item
    for child in self.left, self.right:
        if child: yield from child.number()

我以前从未见过 Python 中的类型注释。那是 Python 3 的东西吗?

于 2013-11-01T18:13:17.203 回答
0

我有一个非递归迭代器,用于在https://pypi.python.org/pypi/treap返回树(treap)中的值

从迭代器到列表只需像 list(it()) 一样包装迭代器

最后我听说,'yield from' 很慢。

于 2013-11-01T18:56:24.090 回答