美文网首页
面试题34.二叉树中和为某一值的路径_hn

面试题34.二叉树中和为某一值的路径_hn

作者: 1只特立独行的猪 | 来源:发表于2020-03-25 20:44 被阅读0次

    题目描述

    输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。

    示例

    示例 1:

    给定如下二叉树,以及目标和 sum = 22,
    
                  5
                 / \
                4   8
               /   / \
              11  13  4
             /  \    / \
            7    2  5   1
    返回:
    
    [
       [5,4,11,2],
       [5,8,4,5]
    ]
    
    

    提示:
    节点总数 <= 10000

    解答方法

    方法一:回溯法(先序遍历+路径记录)

    思路

    先序遍历: 按照“根、左、右”的顺序,遍历树的所有节点。
    路径记录: 在先序遍历中,当 ① 根节点到叶节点形成的路径 且 ② 路径各节点值的和等于目标值 sum 时,记录此路径。
    参考:https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/solution/mian-shi-ti-34-er-cha-shu-zhong-he-wei-mou-yi-zh-5/

    代码

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
            path = []
            res = []
            def dfs(root, sum):
                if not root:
                    return
                path.append(root.val)
                sum -= root.val
                if sum == 0 and not root.left and not root.right:
                    res.append(path[:])
                dfs(root.left, sum)
                dfs(root.right, sum)
                path.pop()
            dfs(root,sum)
            return res
    

    时间复杂度

    O(N) : N 为二叉树的节点数,先序遍历需要遍历所有节点。

    空间复杂度

    O(N) : 最差情况下,即树退化为链表时,path 存储所有树节点,使用O(N) 额外空间。

    相关文章

      网友评论

          本文标题:面试题34.二叉树中和为某一值的路径_hn

          本文链接:https://www.haomeiwen.com/subject/ghnxuhtx.html