JZ24 二叉樹中和爲某一值的路徑

二叉樹中和爲某一值的路徑

輸入一顆二叉樹的根節點和一個整數,按字典序打印出二叉樹中結點值的和爲輸入整數的所有路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。

 解題思路: 遞歸回溯的解法

1.按照前序方式去遍歷(根,左,右)
2.遞歸處理:

  • 忽略空節點
  • 遞歸過程中去修改sum的結果,一旦發現等於0同時是根節點則返回結果
  • 回溯就是每次先插入當前節點,遞歸完成後刪除
 
func helper(root *TreeNode ,  expectNumber int, arr []int, ret *[][]int) {
    if root == nil {
        return
    }
    arr = append(arr, root.Val)
    if root.Val == expectNumber && root.Left == nil && root.Right == nil {
        tmp := make([]int, len(arr))
        copy(tmp, arr)
        *ret = append(*ret, tmp)
    }
    helper(root.Left, expectNumber - root.Val, arr, ret)
    helper(root.Right, expectNumber - root.Val, arr, ret)
    
    arr = arr[:len(arr)-1]
}

func pathSum( root *TreeNode,  expectNumber int ) [][]int {
    if root == nil {
        return nil
    }
    var ret [][]int
    helper(root, expectNumber, []int{}, &ret)
    return ret
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章