[LeetCode刷题记录]113 路径总和 II

题目描述

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

说明: 叶子节点是指没有子节点的节点。

难度

中等

题解

采用深度搜索优先,遍历每条从根节点到叶子节点的路径。遍历到叶子节点,且此路径和满足条件,则该路径即为一条满足要求的路径。

实现

// 声明两个全局变量用来保存结果
// ans保存所有满足条件的路径
var ans [][]int

// path保存一条满足条件的路径
var path []int

// 深度搜索优先,递归调用
func dfs(root *TreeNode, sum int) {
	if root == nil {
		return
	}
	path = append(path, root.Val)
	sum -= root.Val
	if root.Left == nil && root.Right == nil && sum == 0 {
		// path是全局共享的
		tmp := make([]int, len(path))
		copy(tmp, path)
		ans = append(ans, tmp)
	}
	dfs(root.Left, sum)
	dfs(root.Right, sum)
	path = path[:len(path)-1]
}

func pathSum(root *TreeNode, sum int) [][]int {
	ans = [][]int{}
	path = []int{}
	dfs(root, sum)
	return ans
}

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: MengBin


posted @ 2020-09-26 12:10  落雷  阅读(104)  评论(0编辑  收藏  举报