在Python中冒泡递归调用返回值

时间:2017-05-25 23:16:50

标签: python recursion

我不熟悉如何通过Python中的递归函数调用冒泡回调。在这个例子中,我写了一个'检查某些东西是否是二叉树方法'必须返回true或false。但是,如果我从另一个函数调用它(即使我点击我的条件)我将不会返回False。

如何确保此次回复最终完成?

def isValidTree(root, tempArr):
    if(root.left):
        return isValidTree(root.left, tempArr)

    if(len(tempArr) == 0):
        tempArr.append(root.data)
    elif(tempArr[len(tempArr) - 1] >= root.data):
        return False
    else:
        tempArr.append(root.data)

    if(root.right):
        return isValidTree(root.right, tempArr)

def isBinarySearchTree(root):
    print(isValidTree(root, []))

2 个答案:

答案 0 :(得分:1)

您应该检查递归调用是否返回False,而不是仅仅将递归调用的结果返回给isValidTree(root.left)isValidTree(root.right),并且在这种情况下将False结果传播给调用者。此外,如果没有遇到错误,您应该返回True:

def isValidTree(root, tempArr):
    if root.left:
        if not isValidTree(root.left, tempArr):
            # Propagate error in left subtree to the parent.
            return False

    if len(tempArr) == 0:
        tempArr.append(root.data)
    elif tempArr[len(tempArr) - 1] >= root.data:
        return False
    else:
        tempArr.append(root.data)

    if root.right:
        if not isValidTree(root.right, tempArr):
            # Propagate error in right subtree to the parent.
            return False

    # No errors encountered, so it was valid.
    return True

答案 1 :(得分:1)

当您遍历树时,您的代码的结构方式应该返回的值TrueFalse以指示子树的有效性。正如@Vasif所说,您将返回stringNone,这不是您想要的。

您需要首先测试基本情况 Am I at a leaf?

我不确定你在使用tempArr做什么,但我会留下它。

def is_bst_tree(treenode, temp_arr):
    if treenode.isempty():  # this should be a method on your treenode data type
        return True

    # do the check of the curent value 
    # based on being on the left or right 
    # side of tree   

    # return False # this should be done after you have made the relevant checks


    return is_bst_tree(treenode.right,temp_arr) and is_bst_tree(treenode.left, temp_arr)

"冒泡"将根据检查或您在叶子的事实从函数末尾的递归调用发生。 您将留下boolean and ... and boolean链,该链将解析为TrueFalse

您可以从https://en.wikipedia.org/wiki/Binary_search_tree#Verification调整算法 有关最小值和最大值,请参阅Maximum and Minimum values for ints