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 @@
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
\ 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)
+ }
+ }
+ }
+}