考点:考查对二叉树的前序遍历的理解
class BinaryTreeNode():
def __init__(self,value,left=None,right=None):
self.value=value
self.left=left
self.right=right
class StackUnderflow(ValueError):
pass
class SStack():
def __init__(self):
self._elems=[]
def is_empty(self):
return self._elems==[]
def top(self):
if self._elems==[]:
StackUnderflow("in SStack top()")
return self._elems[-1]
def push(self,elem):
self._elems.append(elem)
def pop(self):
if self._elems==[]:
raise StackUnderflow("In Sstack top")
self._elems.pop()
def FindPathOld(pRoot,expectedSum):
if pRoot is None:
return
path=[]
currentSum=0
FindPath(pRoot,expectedSum,path,currentSum)
def FindPath(pRoot,expectedSum,path,currentSum):
currentSum+=pRoot.value
path.append(pRoot.value)
#如果是叶子节点,并且路径上节点的和等于输入的值
#打印出这条路径
isLeaf=pRoot.left is None and pRoot.right is None
if currentSum==expectedSum and isLeaf:
print("A path is found")
for i in path:
print("%d\t"%i)
print('\n')
#如果不是叶节点,则遍历它的子节点
if pRoot.left is not None:
FindPath(pRoot.left,expectedSum,path,currentSum)
if pRoot.right is not None:
FindPath(pRoot.right,expectedSum,path,currentSum)
#在返回父节点时,在路径上删除当前节点
currentSum-=pRoot.value
path.pop()
if __name__=="__main__":
root=BinaryTreeNode(10)
root.left=BinaryTreeNode(5)
root.right=BinaryTreeNode(12)
root.left.left=BinaryTreeNode(4)
root.left.right=BinaryTreeNode(7)
FindPathOld(root,22)