diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..73f69e0
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/algorithms-2.iml b/.idea/algorithms-2.iml
new file mode 100644
index 0000000..c956989
--- /dev/null
+++ b/.idea/algorithms-2.iml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..28a804d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..ed6e09f
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/algorithms-2.iml" filepath="$PROJECT_DIR$/.idea/algorithms-2.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/data-structures/binary-tree/bst.go b/data-structures/binary-tree/bst.go
index da1aa35..28f085d 100644
--- a/data-structures/binary-tree/bst.go
+++ b/data-structures/binary-tree/bst.go
@@ -157,3 +157,43 @@ func IterOnTree(n *Node, f func(*Node)) bool {
 
 	return IterOnTree(n.Right, f)
 }
+
+func (t *Tree) PreOrder(n *Node) []int {
+	var nodes []int
+
+	if n == nil {
+		return nodes
+	}
+
+	nodes = append(nodes, n.Value)
+	nodes = append(nodes, t.PreOrder(n.Left)...)
+	nodes = append(nodes, t.PreOrder(n.Right)...)
+	return nodes
+}
+
+func (t *Tree) InOrder(n *Node) []int {
+	var nodes []int
+
+	if n == nil {
+		return nodes
+	}
+
+	nodes = append(nodes, t.PostOrder(n.Left)...)
+	nodes = append(nodes, n.Value)
+	nodes = append(nodes, t.PostOrder(n.Right)...)
+	return nodes
+}
+
+func (t *Tree) PostOrder(n *Node) []int {
+	var nodes []int
+
+	if n == nil {
+		return nodes
+	}
+
+	nodes = append(nodes, t.PostOrder(n.Left)...)
+	nodes = append(nodes, t.PostOrder(n.Right)...)
+
+	nodes = append(nodes, n.Value)
+	return nodes
+}
diff --git a/data-structures/binary-tree/bst_test.go b/data-structures/binary-tree/bst_test.go
index 73930da..957ea3a 100644
--- a/data-structures/binary-tree/bst_test.go
+++ b/data-structures/binary-tree/bst_test.go
@@ -2,6 +2,7 @@ package bst
 
 import (
 	"fmt"
+	"reflect"
 	"testing"
 )
 
@@ -52,3 +53,72 @@ func TestTree(t *testing.T) {
 		t.Error()
 	}
 }
+
+func TestTraversalAlgorithms_PreOrder(t *testing.T) {
+	n := NewNode(1)
+
+	tree := NewTree(n)
+
+	tree.Insert(4)
+	tree.Insert(2)
+	tree.Insert(5)
+	tree.Insert(3)
+	tree.Insert(6)
+
+	actual := tree.PreOrder(n)
+	expected := [...]int{1, 4, 2, 3, 5, 6}
+
+	for i, num := range actual {
+		if num != expected[i] {
+			if !reflect.DeepEqual(expected, actual) {
+				t.Errorf("PreOrder() = %v, want %v", actual, expected)
+			}
+		}
+	}
+}
+
+func TestTraversalAlgorithms_InOrder(t *testing.T) {
+	n := NewNode(1)
+
+	tree := NewTree(n)
+
+	tree.Insert(4)
+	tree.Insert(2)
+	tree.Insert(5)
+	tree.Insert(3)
+	tree.Insert(6)
+
+	actual := tree.InOrder(n)
+	expected := [...]int{1, 3, 2, 6, 5, 4}
+
+	for i, num := range actual {
+		if num != expected[i] {
+			if !reflect.DeepEqual(expected, actual) {
+				t.Errorf("InOrder() = %v, want %v", actual, expected)
+			}
+		}
+	}
+}
+
+func TestTraversalAlgorithms_PostOrder(t *testing.T) {
+	n := NewNode(1)
+
+	tree := NewTree(n)
+
+	tree.Insert(4)
+	tree.Insert(2)
+	tree.Insert(5)
+	tree.Insert(3)
+	tree.Insert(6)
+
+	actual := tree.PostOrder(n)
+	expected := [...]int{3, 2, 6, 5, 4, 1}
+
+	for i, num := range actual {
+		if num != expected[i] {
+			if !reflect.DeepEqual(expected, actual) {
+				t.Errorf("PostOrder() = %v, want %v", actual, expected)
+			}
+		}
+	}
+}