您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何分析python二叉樹中和為某一值的路徑,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
輸入一棵二叉樹和一個整數,打印出二叉樹中節點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。
示例:
給定如下二叉樹,以及目標和 sum = 22
,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
提示:
節點總數 <= 10000
注意:本題與主站 113 題相同:https://leetcode-cn.com/problems/path-sum-ii/
解題思路:
1,此題只是,先序遍歷的一個變形
2,遞歸執行,深度優先遍歷,這個時候sum變為sum-root.Val
3,到達葉子節點的時候,判斷sum==root.Val,是則將整個鏈路加入結果里,否則,繼續遍歷
4,需要注意一點了,go的slice傳遞的是值,但是數據引用的是同一份
5,copy的時候需要先make分配空間,否則copy不成功
代碼實現
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func pathSum(root *TreeNode, sum int) [][]int {
var p[]int
var r [][]int
r=dfs(root,sum,p,r)
return r
}
func dfs(root *TreeNode, sum int,path []int,ret [][]int)[][]int{
if root==nil {
return ret
}
path=append(path,root.Val)
if root.Left==nil && root.Right==nil {
if sum==root.Val{
p:=make([]int,len(path))
copy(p,path)
ret=append(ret,p)
fmt.Println(1,":",path,p,sum,root,ret)
}
return ret
}
if root.Left==nil{
return dfs(root.Right,sum-root.Val,path,ret)
}
if root.Right==nil{
return dfs(root.Left,sum-root.Val,path,ret)
}
l:=dfs(root.Left,sum-root.Val,path,ret)
r:=dfs(root.Right,sum-root.Val,path,ret)
fmt.Println(ret,l,r)
ret=append(ret,l...)
ret=append(ret,r...)
return ret
}
關于如何分析python二叉樹中和為某一值的路徑就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。