递归地获取二叉树中节点的路径

时间:2016-02-04 20:32:33

标签: python recursion binary-tree

我在获取二叉树中节点的路径时遇到问题。 具体来说,当我从堆栈框架返回时,我不知道如何从堆栈中弹出元素。

def getPath(self, target):

    stack = []

    def _getPath(head):
        nonlocal stack
        nonlocal target

        stack.append(head)

        if head.value == target:
            return stack
        if head.left is not None:
            _getPath(head.left)
        if head.right is not None:
            _getPath(head.right)

    _getPath(self.root)

    return stack

目前,堆栈将包含树中的所有元素。

1 个答案:

答案 0 :(得分:3)

这里的问题是:找到目标的时间信息必须传播回getPath的被调用实例。堆栈的构造是该发现的“副作用”。因此,我建议您在getPath中返回一个布尔值,如果在当前调查的子树中找到目标,则为True。然后我们知道我们必须将值附加到“堆栈”:

def getPath(self, target):

    stack = []

    def _getPath(head):
        nonlocal stack
        nonlocal target
        if head.value == target:
            stack.append(head)
            return True
        for child in (head.left, head.right):
            if child is not None:
                if  _getPath(child):
                    stack.append(head)
                    return True
        return False


    _getPath(self.root)
    return reversed(stack)