package main import "fmt" /** * Created by Chris on 2021/8/1. */ type TreeNode struct{ Val int Left *TreeNode Right *TreeNode } /** 解法一:dfs */ func sumNumbers( root *TreeNode ) int { return dfs(0, root) } func dfs(currentSum int, node *TreeNode) int { if node == nil{ return 0 } var sum = currentSum * 10 + node.Val if node.Left == nil && node.Right == nil{ return sum } else{ return dfs(sum, node.Left) + dfs(sum, node.Right) } } /** 解法二:bfs 使用切片来模拟Java中的Queue队列 */ type pair struct{ //存储当前节点 node *TreeNode //存储当前路的数值 num int } func sumNumbers1( root *TreeNode ) int { if root == nil{ return 0 } var res int = 0 //初始化队列 var queue = []pair{{root, root.Val}} //开始读取队列中的数据 for ;len(queue) > 0;{ var tempNode = queue[0] queue = queue[1:] var leftNode = tempNode.node.Left var rightNode = tempNode.node.Right var num = tempNode.num if leftNode == nil && rightNode == nil{ res += num } else{ if leftNode != nil{ queue = append(queue, pair{leftNode, num * 10 + leftNode.Val}) } if rightNode != nil{ queue = append(queue, pair{rightNode, num * 10 + rightNode.Val}) } } } return res } /** 答案: 13 + 12 = 25 */ func main(){ var node1 = &TreeNode{1, nil, nil} var node2 = &TreeNode{2, nil, nil} var node3 = &TreeNode{3, nil, nil} //var node4 = &TreeNode{4, nil, nil} node1.Left = node2 node1.Right = node3 //node3.Right = node4 var res = sumNumbers1(node1) fmt.Println(res) }