1. 程式人生 > 其它 >[Leetcode]30.求根節點到葉節點數字之和

[Leetcode]30.求根節點到葉節點數字之和

題目:給你一個二叉樹的根節點 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