import (
	"strconv"
)

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func binaryTreePaths(root *TreeNode) (paths []string) {
	if root == nil {
		return
	}
	traversalPaths(root, "", &paths)
	return
}

func traversalPaths(node *TreeNode, path string, paths *[]string) {
	path += "->" + strconv.Itoa(node.Val)
	if node.Left != nil {
		traversalPaths(node.Left, path, paths)
	}
	if node.Right != nil {
		traversalPaths(node.Right, path, paths)
	}
	if node.Left == nil && node.Right == nil {
		*paths = append(*paths, path[2:])
	}
}