Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 检查给定的和是否可以通过BST Python中的任何节点组合实现_Python 2.7_Recursion_Sum_Binary Search Tree - Fatal编程技术网

Python 2.7 检查给定的和是否可以通过BST Python中的任何节点组合实现

Python 2.7 检查给定的和是否可以通过BST Python中的任何节点组合实现,python-2.7,recursion,sum,binary-search-tree,Python 2.7,Recursion,Sum,Binary Search Tree,我正在为一个大学Python课程做作业,给出了创建二进制搜索树的代码 # creates an empty tree def createEmptyTree(): return None # adds a value to a BST and returns a pointer to the modified BST def add(tree, value): if tree == None: return {'data':value, 'left':None

我正在为一个大学Python课程做作业,给出了创建二进制搜索树的代码

# creates an empty tree
def createEmptyTree():
     return None

# adds a value to a BST and returns a pointer to the modified BST
def add(tree, value):
    if tree == None:
        return {'data':value, 'left':None, 'right':None}
    elif value < tree['data']:
        tree['left'] = add(tree['left'],value)
        return tree
    elif value > tree['data']:
        tree['right'] = add(tree['right'],value)
        return tree

def main():
    myTree = createEmptyTree()  
    myTree = add(myTree, 20)
    myTree = add(myTree, 2)
    myTree = add(myTree, 25)
    myTree = add(myTree, 14)
    myTree = add(myTree, 75)
    myTree = add(myTree, 93)
    print hasSum(myTree, 22)
但它没有返回任何值,请告诉我我做错了什么,我仍在努力掌握递归


谢谢。

好的,这一个符合20,22,36,45120213的真实情况

def hasSum(tree, Sum):

    if tree is not None:

        Decrement = tree['data']
        Sum = Sum - Decrement

        if Sum == 0:
            return True

        else:
            return hasSum(tree['right'], Sum) or hasSum(tree['left'], Sum)

i = 0
while (i<300):
    i+=1
    if hasSum(myTree,i):
        print i, hasSum(myTree,i)
def hasSum(树,和):
如果树不是无:
减量=树['data']
总和=总和-减量
如果总和=0:
返回真值
其他:
返回hasSum(tree['right'],Sum)或hasSum(tree['left'],Sum)
i=0

而(i则按顺序遍历

对于每个节点,计算差值(“k-currentnode的值”,其中k是最终和)

在“集合”中跟踪到目前为止看到的节点值

如果目标在集合中,则返回True

否则,将currentnode的值添加到集合中

def checkSum(root, k, seen = set()):
    if root:
        checkSum(root.left, k, seen)
        target = k-root.value
        #print "Seen", seen
        #print "Value", root.value
        #print "Target", target
        if target in seen:
            return True
        else:
            seen.add(root.value)
        checkSum(root.right, k, seen)
    return False

是否允许我们在方法中使用更多参数,例如,我可以使用hasSum(树、总和、级别)吗?只是想知道这个问题有什么限制?这有什么用处吗?
def checkSum(root, k, seen = set()):
    if root:
        checkSum(root.left, k, seen)
        target = k-root.value
        #print "Seen", seen
        #print "Value", root.value
        #print "Target", target
        if target in seen:
            return True
        else:
            seen.add(root.value)
        checkSum(root.right, k, seen)
    return False