有人可以解释一下“self.preorder_print(self.root,”“)[: - 1]”行在print_tree函数里面做了什么?

时间:2017-08-03 20:15:18

标签: python-3.x function

我理解切片符号。但是需要一些帮助。

下面的代码遍历并打印二叉树。有人可以在self.preorder_print(self.root, "")[:-1]函数中解释print_tree行在这里做了什么吗?

class Node(object):
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

class BinaryTree(object):
    def __init__(self, root):
        self.root = Node(root)

    def search(self, find_val):
        return self.preorder_search(self.root, find_val)

    def print_tree(self):
        return self.preorder_print(self.root, "")[:-1]

    def preorder_search(self, start, find_val):
        if start:
            if start.value == find_val:
                return True
            else:
                return self.preorder_search(start.left, find_val) or self.preorder_search(start.right, find_val)
        return False

    def preorder_print(self, start, traversal):
        if start:
            traversal += ("-" + str(start.value))
            traversal = self.preorder_print(start.left, traversal)
            traversal = self.preorder_print(start.right, traversal)
        return traversal

1 个答案:

答案 0 :(得分:1)

[: - 1]是一个切片表示法,它允许对那些实现它的对象进行分段,使用方法如下[start:end:step] start 是初始值您希望开始获取元素的位置,同样 end 是停止的位置,如果是负数,它将从最后计算多个位置,如果您不知道对象有多长,则非常有用,步骤允许跳过不同于1的元素和/或如果是负数则反向取消,每个都可以省略,在这种情况下它们采用适当的默认值

例如

>>> "123"[:-1]
'12'
>>> 

是删除最后一个元素,所以在你的情况下preorder_print返回一个字符串,用[:-1]删除最后一个字符

here您可以找到有关切片符号的更多信息