91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++路徑之和實例分析

發布時間:2022-03-17 16:06:50 來源:億速云 閱讀:141 作者:iii 欄目:大數據

本文小編為大家詳細介紹“c++路徑之和實例分析”,內容詳細,步驟清晰,細節處理妥當,希望這篇“c++路徑之和實例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

算法:

算法采用遞歸,核心在于如何找到遞歸的終止條件,具體步驟如下:

1.采用遞歸的方式,sum的數值要隨著遍歷過的節點做遞減操作,sum = sum-root.Val2.遞歸的終止條件sum==0是其中之一,如果要求是葉子節點的也需要加上

題目1:路徑總和

代碼實現:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func hasPathSum(root *TreeNode, sum int) bool {    if root == nil {         return false    }    // 葉子節點的判斷,排除非葉子節點==sum的情況    if root.Left == nil && root.Right == nil {        return sum == root.Val    }    res := sum - root.Val     if hasPathSum(root.Left,res) {        return true    }    if hasPathSum(root.Right,res) {        return true    }    return false}

題目2:路徑總和2

代碼實現:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */var res [][]intfunc pathSum(root *TreeNode, sum int) [][]int {    res = [][]int{} // 為了清空 res 上次的數值    if root == nil {         return nil    }    // var res [][]int     var tmp []int    dfs(root,sum,tmp)    return res}func dfs(root *TreeNode, sum int, tmp []int) {    if root == nil {         return     }    tmp = append(tmp,root.Val)    if sum == root.Val && root.Left == nil && root.Right == nil {        r := make([]int, len(tmp)) // 防止tmp對應的共享內容被修改        copy(r, tmp)        res = append(res, r)        return     }       dfs(root.Left,sum-root.Val,tmp)    dfs(root.Right,sum-root.Val,tmp)       return }

題目3:路徑總和3

代碼實現:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func pathSum(root *TreeNode, sum int) int {    if root == nil {        return 0    }    result := countPath(root,sum)    result += pathSum(root.Left,sum)    result += pathSum(root.Right,sum)    return result}func countPath(root *TreeNode, sum int) int {    if root == nil {         return 0    }    count := 0    res := sum - root.Val    if res == 0 {        count = 1    }    return count + countPath(root.Left,res) + countPath(root.Right,res)}/*以當前節點作為頭結點的路徑數量以當前節點的左孩子作為頭結點的路徑數量以當前節點的右孩子作為頭結點的路徑數量*/

讀到這里,這篇“c++路徑之和實例分析”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

海宁市| 松溪县| 德兴市| 和硕县| 太谷县| 沂南县| 缙云县| 太仓市| 樟树市| 广宗县| 永宁县| 凌云县| 怀安县| 佛坪县| 龙南县| 温宿县| 九江市| 徐水县| 界首市| 尼木县| SHOW| 南汇区| 富民县| 余姚市| 登封市| 宁远县| 揭东县| 波密县| 昌都县| 手机| 曲松县| 双牌县| 应城市| 全南县| 乌海市| 任丘市| 平凉市| 醴陵市| 开原市| 杭州市| 瓮安县|