LeetCode(合集) 路径总和(二叉树) golang copy的值复制
112. 路徑總和
給定一個二叉樹和一個目標和,判斷該樹中是否存在根節(jié)點到葉子節(jié)點的路徑,這條路徑上所有節(jié)點值相加等于目標和。
說明: 葉子節(jié)點是指沒有子節(jié)點的節(jié)點。
示例:
給定如下二叉樹,以及目標和 sum = 22,
返回 true, 因為存在目標和為 22 的根節(jié)點到葉子節(jié)點的路徑 5->4->11->2。
Code
func hasPathSum(root *TreeNode, sum int) bool {if root == nil {return false}if root.Val == sum && root.Left == nil && root.Right == nil{return true}return hasPathSum(root.Left, sum-root.Val) || hasPathSum(root.Right, sum-root.Val) }113. 路徑總和 II
給定一個二叉樹和一個目標和,找到所有從根節(jié)點到葉子節(jié)點路徑總和等于給定目標和的路徑。
說明: 葉子節(jié)點是指沒有子節(jié)點的節(jié)點。
示例:
給定如下二叉樹,以及目標和 sum = 22,
返回:
[
[5,4,11,2],
[5,8,4,5]
]
Code
var res [][]int func pathSum(root *TreeNode, sum int) [][]int {res = [][]int{}dfs(root, sum, []int{})return res }func dfs(root *TreeNode, sum int, stack []int) {if root == nil {return}stack = append(stack, root.Val)if root.Left == nil && root.Right == nil {if sum == root.Val {r := make([]int, len(stack))copy(r, stack)res = append(res, r)}}dfs(root.Left, sum-root.Val, stack)dfs(root.Right, sum-root.Val, stack) }437. 路徑總和 III
給定一個二叉樹,它的每個結(jié)點都存放著一個整數(shù)值。
找出路徑和等于給定數(shù)值的路徑總數(shù)。
路徑不需要從根節(jié)點開始,也不需要在葉子節(jié)點結(jié)束,但是路徑方向必須是向下的(只能從父節(jié)點到子節(jié)點)。
二叉樹不超過1000個節(jié)點,且節(jié)點數(shù)值范圍是 [-1000000,1000000] 的整數(shù)。
示例:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
10/ \5 -3/ \ \3 2 11/ \ \ 3 -2 1返回 3。和等于 8 的路徑有:
1. 5 -> 3 2. 5 -> 2 -> 1 3. -3 -> 11Code
func pathFrom(root *TreeNode, sum int) int {if root == nil { return 0 }cnt := 0 if root.Val == sum { cnt++ }cnt += pathFrom(root.Left, sum-root.Val)cnt += pathFrom(root.Right, sum-root.Val)return cnt }func pathSum(root *TreeNode, sum int) int {if root == nil { return 0 }return pathFrom(root, sum) + pathSum(root.Left, sum) + pathSum(root.Right, sum) }總結(jié)
以上是生活随笔為你收集整理的LeetCode(合集) 路径总和(二叉树) golang copy的值复制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都大熊猫繁育研究基地一定要带身份证吗
- 下一篇: 114. 二叉树展开为链表 golang