牛客-剑指offer系列题解:二叉树中和为某一值的路径

记录刷题的过程。牛客和力扣中都有相关题目,这里以牛客的题目描述为主。该系列默认采用python语言。
1、问题描述:
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

2、数据结构:
二叉树,深度优先搜索,回溯法

3、题解:

用先根遍历的方法,递归结束的条件是到达叶子节点,且路径上的值之和为所给整数(这个变通一下,每次递归就将目标是减去节点值,到叶子节点时,目标值为0,这个路径就符合要求)。要给两个数组,一个当前遍历的路径,一个存符合条件的路径。
还要注意两点:res.append(list(path))(如果是res.append(path),res会跟随path变化而变化);path.pop()是起到回溯的作用。
牛客-剑指offer系列题解:二叉树中和为某一值的路径_第1张图片

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回二维列表,内部每个列表表示找到的路径
    def FindPath(self, root, expectNumber):
        #write code here
        res,path = [],[]
        def dfs(root,target):
            if not root:
                return
            path.append(root.val)
            target -= root.val
            if target == 0 and not root.left and not root.right:
                res.append(list(path))
            dfs(root.left,target)
            dfs(root.right,target)
            path.pop()#向上回溯
        dfs(root,expectNumber)
        return res

4、复杂度分析:
时间复杂度:O(N)
空间复杂度:O(N),最差的情况下,退化为链表

你可能感兴趣的:(牛客-剑指offer系列题解)