题解 | #二叉树的中序遍历#

二叉树根节点到叶子节点的所有路径和

http://www.nowcoder.com/practice/185a87cd29eb42049132aed873273e83

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)
}

全部评论

相关推荐

脾气小祖宗:这简历摸到都得狠狠地消毒液洗手😂
点赞 评论 收藏
分享
09-28 22:01
已编辑
广西科技大学 IT技术支持
合适才能收到offe...:找桌面运维?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务