本质上是压栈出栈的过程
1.写一个主题函数
主题函数中要给定默认的树,给定的值,还要一个用来存路径的列表,再加一个记录路径长度的变量
2.写一个找路径的函数
首先要确定给的节点是不是一个空的,如果是空的则直接退出;
其次,把当前节点加入到路径,把当前节点值加进路径长度
然后,判断当前是不是叶子(叶子用一个变量表示)
如果是叶子,则再判断叶子路径和和给定值是不是一样,一样则打印路径,不一样则不管
如果不是叶子,则分两部分处理,先看左节点,把左节点做根来重新查找,
再看右节点,把右节点做根来重新查找。
当左右都看完后,把路径记录的最上面的节点删除掉。(即走完一条路径,对应的删掉其已确定过的节点)
class TreeNode(object):
def __init__(self,data,left=None,right=None):
self.root = data
self.left = left
self.right = right
A = TreeNode('A')
B = TreeNode('B')
C = TreeNode('C')
D = TreeNode('D')
E = TreeNode('E')
A.data = 10
B.data = 5
C.data = 12
D.data = 4
E.data = 7
A.left = B
A.right = C
B.left = D
B.right = E
def find_path(root,k,path,csum):
if root is None:
return
csum +=root.data
path.append(root.data)
is_leaf = root.left is None and root.right is None
if is_leaf and csum == k:
print path
if root.left is not None:
find_path(root.left,k,path,csum)
if root.right is not None:
find_path(root.right,k,path,csum)
path.pop()
root = A
k = 22
path = []
csum = 0
find_path(root,k,path,csum)