是否有更短的方式来编写此代码?

时间:2013-11-01 18:02:22

标签: python binary-search-tree

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

谢谢。

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

2 个答案:

答案 0 :(得分:3)

如果你不介意生成器而不是列表,你可以非常巧妙地编写代码。

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

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

答案 1 :(得分:0)

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

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

最后我听说''收益'很慢。