diff --git a/F#/TreeMap.Test/TreeMap.Test.fsproj b/F#/TreeMap.Test/TreeMap.Test.fsproj
new file mode 100644
index 0000000..9b7b4e9
--- /dev/null
+++ b/F#/TreeMap.Test/TreeMap.Test.fsproj
@@ -0,0 +1,29 @@
+
+
+
+ net8.0
+
+ false
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/F#/TreeMap.Test/TreeMapTest.fs b/F#/TreeMap.Test/TreeMapTest.fs
new file mode 100644
index 0000000..aca86d3
--- /dev/null
+++ b/F#/TreeMap.Test/TreeMapTest.fs
@@ -0,0 +1,12 @@
+module TreeMap.Test
+
+open NUnit.Framework
+open FsUnit
+
+[]
+let LeafMapTest () =
+ Leaf 1 |> treeMap ((+) 1) |> should equal (Leaf 2)
+
+[]
+let TreeMapTest () =
+ Node(2, Leaf 1, Node(3, Leaf 4, Leaf 5)) |> treeMap ((+) 1) |> should equal (Node(3, Leaf 2, Node(4, Leaf 5, Leaf 6)))
diff --git a/F#/TreeMap/TreeMap.fs b/F#/TreeMap/TreeMap.fs
new file mode 100644
index 0000000..723ba42
--- /dev/null
+++ b/F#/TreeMap/TreeMap.fs
@@ -0,0 +1,10 @@
+module TreeMap
+
+type BinTree<'T> =
+ | Node of 'T * BinTree<'T> * BinTree<'T>
+ | Leaf of 'T
+
+let rec treeMap func tree =
+ match tree with
+ | Node (value, lhs, rhs) -> Node (func value, treeMap func lhs, treeMap func rhs)
+ | Leaf value -> Leaf (func value)
diff --git a/F#/TreeMap/TreeMap.fsproj b/F#/TreeMap/TreeMap.fsproj
new file mode 100644
index 0000000..d763c97
--- /dev/null
+++ b/F#/TreeMap/TreeMap.fsproj
@@ -0,0 +1,12 @@
+
+
+
+ net8.0
+ true
+
+
+
+
+
+
+
diff --git a/F#/forSpbu.sln b/F#/forSpbu.sln
index 9d54d03..e818636 100644
--- a/F#/forSpbu.sln
+++ b/F#/forSpbu.sln
@@ -21,6 +21,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "07.03", "07.03", "{5CA9053B
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Homework1", "Homework1\Homework1.fsproj", "{04B15EE4-079A-42ED-ACC8-E2DCD25281C6}"
EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "TreeMap", "TreeMap\TreeMap.fsproj", "{68775386-8212-46CE-BA41-10BC58B4DEA2}"
+EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "TreeMap.Test", "TreeMap.Test\TreeMap.Test.fsproj", "{91C86FB1-2E6A-4E53-9E04-AE05DAC8517C}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -58,6 +62,14 @@ Global
{89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Release|Any CPU.Build.0 = Release|Any CPU
+ {68775386-8212-46CE-BA41-10BC58B4DEA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {68775386-8212-46CE-BA41-10BC58B4DEA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {68775386-8212-46CE-BA41-10BC58B4DEA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {68775386-8212-46CE-BA41-10BC58B4DEA2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {91C86FB1-2E6A-4E53-9E04-AE05DAC8517C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {91C86FB1-2E6A-4E53-9E04-AE05DAC8517C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {91C86FB1-2E6A-4E53-9E04-AE05DAC8517C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {91C86FB1-2E6A-4E53-9E04-AE05DAC8517C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{7937CDA8-8285-4E23-AD1A-FC0F04FEEFE6} = {91E3BDA2-0836-46C2-95F0-02513FD7F13F}