描述
输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

  • 该题本质上属于深度优先搜索,使用前序遍历对整棵树遍历,
  • 当访问到叶子结点时如果结果与目标值相同,存储路径,直接返回函数并删除该路径的叶子结点,然后访问该节点的兄弟节点(即上个根节点的右子节点)或者直接返回到上上个根节点的右子节点
  • 如果不同,返回继续遍历,注意每次返回到上个根节点时要删除该path存储的路径
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回二维列表,内部每个列表表示找到的路径
    def FindPath(self, root, expectNumber):
        re = []
        path = []

        def func(r, tar):
            if not r:
                return
            tar -= r.val
            path.append(r.val)
            if tar == 0 and not r.left and not r.right:
                re.append(list(path))
                path.pop()
                return
            func(r.left, tar)
            func(r.right, tar)
            path.pop()

        func(root, expectNumber)
        return re