Skip to content

Latest commit

 

History

History
80 lines (62 loc) · 1.53 KB

0129.md

File metadata and controls

80 lines (62 loc) · 1.53 KB

Sum Root to Leaf Numbers

题目

You are given the root of a binary tree containing digits from 0 to 9 only.

Each root-to-leaf path in the tree represents a number.

For example, the root-to-leaf path 1 -> 2 -> 3 represents the number 123. Return the total sum of all root-to-leaf numbers. Test cases are generated so that the answer will fit in a 32-bit integer.

A leaf node is a node with no children.

Example 1:
Input: root = [1,2,3]
Output: 25
Explanation:
The root-to-leaf path 1->2 represents the number 12.
The root-to-leaf path 1->3 represents the number 13.
Therefore, sum = 12 + 13 = 25.

Example 2:
Input: root = [4,9,0,5,1]
Output: 1026
Explanation:
The root-to-leaf path 4->9->5 represents the number 495.
The root-to-leaf path 4->9->1 represents the number 491.
The root-to-leaf path 4->0 represents the number 40.
Therefore, sum = 495 + 491 + 40 = 1026.

思路

dfs
深度优先走到结点就把改值统计下来加到total
注意回到上层时做值回溯

代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

func sumNumbers(root *TreeNode) int {
	var (
		total  int
		curNum int
	)
	dfs(root, &total, &curNum)
	return total
}

func dfs(node *TreeNode, total, curNum *int) {
	if node == nil {
		return
	}
	temp := *curNum
	*curNum = *curNum*10 + node.Val
	if node.Left == nil && node.Right == nil {
		*total += *curNum
	}
	dfs(node.Left, total, curNum)
	dfs(node.Right, total, curNum)
	*curNum = temp
}