Skip to content

Latest commit

 

History

History
50 lines (38 loc) · 990 Bytes

84.md

File metadata and controls

50 lines (38 loc) · 990 Bytes

二叉树中和为某一值的路径(三)

题目

给定一个二叉树 root 和一个整数值 sum,求该树有多少路径的的节点值之和等于 sum

1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点 2.总节点数目为n 3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1)

示例

输入:{1,2,3,4,5,4,3,#,#,-1},6

返回值:3

思路

  • 暴力穷举
  • DFS 到每个节点,再从每个节点开始 DFS 一把

实现

var count = 0

func FindPath(root *TreeNode, sum int) int {
	if root == nil {
		return count
	}
	Dfs(root, sum)
	FindPath(root.Left, sum)
	FindPath(root.Right, sum)
	return count
}

func Dfs(root *TreeNode, sum int) {
	if root == nil {
		return
	}
	sum -= root.Val
	if sum == 0 {
		count++
		// 这里为什么不 return?
	}
	// 后边的 Val 可能小于或等于 0
	Dfs(root.Left, sum)
	Dfs(root.Right, sum)
}