Python 2.7 检查给定的和是否可以通过BST Python中的任何节点组合实现
我正在为一个大学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
# 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