[Leetcode]30.求根節點到葉節點數字之和
阿新 • • 發佈:2021-11-18
題目:給你一個二叉樹的根節點 root ,樹中每個節點都存放有一個 0 到 9 之間的數字。
每條從根節點到葉節點的路徑都代表一個數字:
例如,從根節點到葉節點的路徑 1 -> 2 -> 3 表示數字 123 。
計算從根節點到葉節點生成的 所有數字之和 。
葉節點 是指沒有子節點的節點。
示例 1:
輸入:root = [1,2,3]
輸出:25
解釋:
從根到葉子節點路徑 1->2 代表數字 12
從根到葉子節點路徑 1->3 代表數字 13
因此,數字總和 = 12 + 13 = 25
示例 2:
輸入:root = [4,9,0,5,1]
輸出:1026
解釋:
從根到葉子節點路徑 4->9->5 代表數字 495
從根到葉子節點路徑 4->9->1 代表數字 491
從根到葉子節點路徑 4->0 代表數字 40
因此,數字總和 = 495 + 491 + 40 = 1026
思想:DFS,使用陣列儲存遍歷到的路徑的數,遍歷到葉子的時候,就將路徑轉換為數,將這個數加到結果中。
func sumNumbers(root *TreeNode) int { if root == nil { return 0 } var p []int var dfs func(root *TreeNode, path []int) var rt int dfs = func(root *TreeNode, path []int) { path = append(path, root.Val) if root.Left == nil && root.Right == nil { var r int i := len(path) - 1 for _, v := range path { v = v * int(math.Pow10(i)) i-- r += v } rt+=r } if root.Left != nil { dfs(root.Left, path) } if root.Right != nil { dfs(root.Right, path) } } dfs(root, p) return rt }
題目來源:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers